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

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium操作表单元素&行为链&操作cookie&页面等待python爬虫入门进阶(14)相关的知识,希望对你有一定的参考价值。

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
😁 1. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽。 Python从入门到精通
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
关注下方公众号,众多福利免费嫖;加我VX进群学习,学习的路上不孤单

说点题外话

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

为啥写这篇文章?

上篇文章我们介绍了selenium的基础知识点。

软件环境

软件版本
电脑系统mac
Chrome96.0.4664.93
chromedriver96.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所示:

如果想清除文本框中输入的数据可以调用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所示

选择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&页面等待

粉丝专属福利

软考资料:实用软考资料

面试题:5G 的Java高频面试题

学习资料:50G的各类学习资料

脱单秘籍:回复【脱单】

并发编程:回复【并发编程】

											👇🏻 验证码 可通过搜索下方 公众号 获取👇🏻 

以上是关于selenium操作表单元素&行为链&操作cookie&页面等待python爬虫入门进阶(14)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 和 Selenium WebDriver 在表单和 iframe 中查找元素

如何使用 selenium 更改元素类属性值

Java-Selenium自动化教程(学了不亏)

Python+Selenium学习笔记8 - 多表单&多窗口切换

selenium java maven 自动化测试 页面元素获取与操作

python3+selenium入门10-表单切换