selenium操作表单元素&行为链&操作cookie&页面等待【python爬虫入门进阶】(14)

举报
码农飞哥 发表于 2021/12/31 16:31:07 2021/12/31
【摘要】 本文继续学习了selenium操作表单元素&行为链&操作cookie&页面等待

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
😁 1. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽。 Python从入门到精通
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

说点题外话

昨晚做梦梦见自己考试交了白卷,一个梦直接把自己惊醒。我不知道为啥会做这样的梦。2021年即将过去,在这个时间点做这样的梦或许老天爷是在提醒我该做年终总结了。

为啥写这篇文章?

上篇文章我们介绍了selenium的基础知识点。
selenium+chromedriver操作浏览器获取动态数据【python爬虫入门进阶】(13),这篇文章接着来学习selenium的相关知识点。唯有文章能记住我终将逝去的时间。
闲话少述,直接进入今日主题。

软件环境

软件 版本
电脑系统 mac
Chrome 96.0.4664.93
chromedriver 96.0.4664.18

selenium操作表单元素

表单元素是页面上最重要的元素,表单元素按照功能可以分为文本输入框text,下拉选择框 select,以及提交按钮submit。下面就这几个元素分别介绍一下。

操作文本输入框text

# 文本类型 text
url = r'https://blog.csdn.net/u014534808'
driver.get(url)
input_tag = driver.find_element(by=By.ID, value='toolbar-search-input')
# 填充数据
input_tag.send_keys('码农飞哥最棒')

首先通过find_element方法定位到元素,然后通过send_keys方法向该表单中填充内容。
页面的效果如下图1所示:
图1
如果想清除文本框中输入的数据可以调用input_tag.clear() 方法进行清除。

操作点击按钮submit

前面我们向文本框中填充了内容,下一步就需要点击搜索按钮进行搜索了。基本的思路还是首先通过find_element方法找到按钮元素,然后调用click()方法操作点击按钮。

url = r'https://blog.csdn.net/u014534808'
driver.get(url)
input_tag = driver.find_element(by=By.ID, value='toolbar-search-input')
# 填充数据
input_tag.send_keys('码农飞哥最棒')
 # 点击事件
search_btn = driver.find_element(by=By.ID, value='toolbar-search-button')
search_btn.click()

运行的结果如下图2所示
图2

选择select

select元素不能直接点击,因为点击后还需要选中元素,这时候selenium就专门为select标签提供了一个类selenium.webdriver.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象后,以后就可以使用这个对象进行选择了。示例代码如下:

from selenium.webdriver.support.ui import Select

# 选中这个标签
driver.get("http://www.ahsszx.cn/")
select_tag = Select(driver.find_element(by=By.NAME, value="select3"))
# 根据索引选择
select_tag.select_by_index(1)
# 根据值选择
select_tag.select_by_value("http://www.cjzx.cn/")
# 根据可视的文本选择
select_tag.select_by_visible_text("凉亭中学")
# 取消选中的所有选项
select_tag.deselect_all()

运行结果是:
在这里插入图片描述

selenium的行为链

有时候页面上的操作可能有很多步,那么这时候可以使用鼠标行为链类ActionChains来完成,比如现在要将鼠标移动到某个元素上并执行点击事件,示例代码如下:

from selenium.webdriver import ActionChains

driver.get('https://www.baidu.com/')
inputTag = driver.find_element(by=By.ID, value='kw')
submitTag = driver.find_element(by=By.ID, value='su')

actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag, '码农飞哥')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
time.sleep(2)
driver.close()

这里以https://www.baidu.com/ 网站为例,模拟鼠标行为操作,在搜索框中输入码农飞哥 并执行搜索操作。为了更好展示页面效果,这里睡眠2秒钟之后关闭页面。

selenium操作cookie

用selenium同样可以操作cookie。

  1. 获取所有的cookie
for cookie in driver.get_cookies():
    print(cookie)
  1. 获取某个cookie
value = driver.get_cookie('name')
  1. 删除所有cookie
driver.delete_all_cookies()
  1. 删除某个cookie
driver.delete_cookie(key)

在这里插入图片描述

selenium实现页面等待

现在有很多网站采用了ajax技术,这样程序便不知道何时某个元素完全加载出来了,如果实际页面等待的时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个webElement,那么就会抛出NullPointer的异常,为了解决这个问题,所以Selenium提供了两种等待方式:一种是隐式等待,一种时显示等待。

  1. 隐式等待:调用driver.imlicitly_wait。那么在获取不可用的元素之前,会先等待10秒钟的时间。示例代码如下:
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 请求网页
driver.get('https://blog.csdn.net/u014534808')
  1. 显示等待:显示等待是表明某个条件成立之后才执行获取元素的操作,也可以在等待的时候指定一个最大的时间,如果超过这个时间那么就抛出一个异常。显示等待应该使用selenium.webdriver.support.execpted_conditions 期望的条件和selenium.webdriver.support.ui.WebDriverWait 来配合完成。示例代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://cloud.kepuchina.cn/newSearch/imgList')
try:
    element=WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'all-number')))
finally:
  time.sleep(2)
  driver.quit()

总结

本文继续学习了selenium操作表单元素&行为链&操作cookie&页面等待

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。