网站首页 > 技术文章 正文
selenium的webdriver介绍
从selenium导入webdriver模块,在pycharm中跳转webdriver模块的__init__.py文件,内容如图所示:从selenium包的子目录中导入了很多模块并做了重命名,用于支持如下Chrome/Edge/Ie/Firefox/Safari浏览器。
使用方法类似如下:
先导入webdriver模块
from selenium import webdriver
初始化各个浏览器的webdriver类:
driver = webdriver.Chrome()
driver = webdriver.Edge()
driver = webdriver.Firefox()
driver = webdriver.Ie()
driver = webdriver.Safari()
然后使用get函数打开网页地址,比如打开百度
driver.get("https://www.baidu.com/")
web页面元素的查找方法
当打开网页后我们得先定位到网页中各个元素的位置和信息,这样selenium才能做对应的操作。
举例:打开百度网页后,通过查找元素,找到输入框和百度一下对应元素信息。
1)输入框的元素信息:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
复制Xpath地址为://*[@id="kw"]
2)百度一下按钮的元素信息:
<input type="submit" id="su" value="百度一下" class="bg s_btn">
对应Xpath为://*[@id="su"]
3)通过以上元素信息我们就拿到了输入框和百度一下按钮的id信息,然后获取后输入文本和点击按钮,就完成了一次查找和点击的动作。
当然我们除了通过id获取元素,也可以通过name,xpath等方式操作,大家不妨多试下,此处不再赘述。
webdriver.WebDriver类中的常用方法
在webdriver模块中WebDriver类提供了很多方法,比如我们最常用的find_element方法用于找元素,get方法用于打开网页等,具体介绍如下:
类型 | 函数 | 作用 |
网页相关 | get() | 打开传入的URL网页地址 |
current_url | 是一个属性方法,返回当前url | |
page_source | 是一个属性方法,返回当前打开页面的源代码 | |
refresh() | 刷新当前页面。 | |
back() forward() | 浏览器的后退和前进操作。 | |
implicitly_wait() | 是一种智能等待,指在设置的等待时间范围内,只要满足了执行条件,就会立即结束等待,继续往下进行,如果超时,则抛出异常。 | |
set_script_timeout(seconds) | 设置脚本执行的时间,指在设置的等待时间范围内,只要满足了执行条件,就会立即结束等待,继续往下进行,如果超时,则抛出异常。 | |
set_page_load_timeout(seconds) | 设置页面加载的时间,指在设置的等待时间范围内,只要满足了执行条件,就会立即结束等待,继续往下进行,如果超时,则抛出异常。 | |
timeouts | 属性方法,返回包含上面三个时间的Timeouts对象,并可以设置三个时间的值。 | |
cookies操作 | get_cookies() | 获取页面对应的cookie列表 |
get_cookie(name) | 获取cookie列表中其中一个name=传入值的cookie,获取不到返回None | |
delete_cookie(name) | 删除cookie列表中其中一个name=传入值的cookie | |
delete_all_cookies() | 删除所有的cookie | |
add_cookie(cookie_dict) | 添加一个cookie字典 | |
窗口操作 | maximize_window() minimize_window() fullscreen_window() | 最大化或最小化或者全屏浏览器窗口。 |
window_handles() | 存放打开窗口的句柄,用于切换不同窗口 | |
current_window_handle() | 返回当前窗口的句柄 | |
switch_to.window() | 切换不同的窗口页面(参数传入window_handles() 返回的列表中的某个句柄) | |
get_window_rect() | 获取窗口的坐标和大小 | |
set_window_rect() | 设置窗口的坐标和大小(坐标指距离屏幕左上角的横坐标和竖坐标值) | |
get_window_position() | 获取窗口的坐标,默认是当前窗口,也可以传某个窗口句柄(坐标指距离屏幕左上角的横坐标和竖坐标值) | |
set_window_position() | 设置窗口的坐标,默认是当前窗口,也可以传某个窗口句柄 | |
get_window_size() | 获取窗口的大小,默认是当前窗口,也可以传某个窗口句柄 | |
set_window_size() | 窗口的大小,默认是当前窗口,也可以传某个窗口句柄 | |
close() | 关闭当前窗口 | |
SwitchTo类对应的一些操作: 提示框操作 frame操作 | switch_to.alert() | 切换到提示框对象 |
switch_to.frame() | 切换到不同的frame | |
switch_to.default_content() | 退出到默认frame | |
switch_to.parent_frame() | 退出到上一级frame | |
执行js脚本 | execute_script() | 执行js脚本 |
execute_async_script() | 异步的执行js脚本 | |
退出操作 | quit() | 关闭所有窗口,退出浏览器 |
selenium中查找元素方法
初始化好某浏览器的webdriver后,使用get函数打开网页地址,然后使用find_element(返回元素对象WebElement)或者find_elements方法(返回元素对象WebElement的列表)查找页面元素对象,有了元素对象,才能做接下来的一些操作,比如输入文本/点击按钮等。
,函数源代码如下:适用selenium4.23.1版本
函数中的参数by表示定位元素的方式,在selenium.webdriver.common.by.By中定义如下:
函数中的参数value表示参数by对应的值。
也就是说find_element函数可以通过以下8种方式进行元素定位:
["id", "xpath", "link text", "partial link text", "name", "tag name", "class name", "css selector"]
举例:使用Safari浏览器打开百度,以id来定位搜索框的元素位置。
from selenium import webdriver
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.find_element(By.ID,'kw')
举例:使用Safari浏览器打开百度,以name来定位搜索框的元素位置。
driver.find_element(By.NAME,'wd')
举例:使用Safari浏览器打开百度,以class来定位搜索框的元素位置。
driver.find_element(By.CLASS_NAME,'s_ipt')
举例:使用Safari浏览器打开百度,以Xpath来定位搜索框的元素位置。
driver.find_element(By.XPATH,'//*[@id="kw"]')
举例:使用Safari浏览器打开百度,以link text来定位新闻链接的元素位置。
driver.find_element(By.LINK_TEXT,'新闻')
设置隐式等待时间implicitly_wait
测试代码:
from selenium import webdriver
driver = webdriver.Safari()
driver.implicitly_wait(5)
设置脚本等待时间set_script_timeout
测试代码:
from selenium import webdriver
driver = webdriver.Safari()
driver.set_script_timeout(5)
设置页面加载等待时间set_page_load_timeout
测试代码:
from selenium import webdriver
driver = webdriver.Safari()
driver.set_page_load_timeout(5)
获取所有设置的等待或者超时时间timeouts
timeouts属性函数返回的是Timeouts类,包含三个属性
测试代码:
1)设置等待和超时时间后,通过timeouts属性函数读取这些设置的时间
from selenium import webdriver
driver = webdriver.Safari()
driver.implicitly_wait(5)
driver.set_script_timeout(5)
driver.set_page_load_timeout(5)
print(driver.timeouts.implicit_wait)
print(driver.timeouts.page_load)
print(driver.timeouts.script)
执行结果:
5.0
5.0
5.0
2) 设置timuouts属性中三个时间
先导入Timeouts类
from selenium.webdriver.common.timeouts import Timeouts
测试代码:
from selenium import webdriver
#初始化Timeouts类 并设置时间
timeouts_new = Timeouts()
timeouts_new.implicit_wait = 4
timeouts_new.page_load = 4
timeouts_new.script = 4
#将属性timeouts设置为Timeouts对象
driver.timeouts = timeouts_new
#打印3个时间值
print(driver.timeouts.implicit_wait)
print(driver.timeouts.page_load)
print(driver.timeouts.script)
执行结果:
4.0
4.0
4.0
网页的一些操作方法
先定义Safari浏览器的driver对象
from selenium import webdriver
driver = webdriver.Safari()
- 打开传入的URL网页地址
driver.get("https://www.toutiao.com/")
- 返回当前url
print(driver.current_url)
- page_source 是一个属性方法,返回当前打开页面的源代码
print(driver.page_source)
- refresh() 刷新当前页面。
driver.refresh()
- back()和forward() 浏览器的后退和前进操作。
driver.back()
driver.forward()
- 退出webdriver
driver.quit()
cookie操作方法
from selenium import webdriver
- 获取所有cookie
print(driver.get_cookies())
- 获取某个name值的cookie
print(driver.get_cookie('__ac_nonce'))
- 删除某个name值的cookie
driver.delete_cookie('__ac_nonce')
- 删除所有cookie
driver.delete_all_cookies()
- 添加一个cookie
driver.add_cookie({'name':'nonce', 'value': '7421004976065267240'})
窗口操作方法
from selenium import webdriver
- 获取窗口大小并设置窗口大小
#获取窗口大小
print(driver.get_window_size())
#设置大小
driver.set_window_size(1000,600)
print(driver.get_window_size())
- 获取窗口坐标并设置窗口坐标
#获取坐标
print(driver.get_window_position())
#设置坐标
driver.set_window_position(20,30)
print(driver.get_window_position())
- 获取窗口坐标和大小并设置窗口坐标和大小
#获取坐标和大小
print(driver.get_window_rect())
#设置坐标和大小
driver.set_window_rect(20,30,800,700)
print(driver.get_window_rect())
- 窗口最大化/最小化/全屏
driver.minimize_window()
driver.maximize_window()
driver.fullscreen_window()
- 关闭窗口
driver.close()
- 切换窗口
通过driver.window_handles获取打开窗口的句柄列表,然后通过driver.switch_to.window()切换不同的窗口
以百度网站举例,打开新闻链接,然后切换窗口
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.maximize_window()
sleep(2)
#打开新闻链接
driver.find_element(By.LINK_TEXT,'新闻').click()
#打印文件句柄
print(driver.window_handles)
#循环切换窗口
while True:
for i in driver.window_handles:
sleep(1)
driver.switch_to.window(i)
程序执行后,会打开新闻,然后来回切换两个窗口
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。
猜你喜欢
- 2025-01-02 JavaScript字符串toString()方法教程
- 2025-01-02 vue3 - 内置组件Teleport的使用
- 2025-01-02 网页三维CAD中加载和保存STEP模型
- 2025-01-02 在.NET Web API中设置响应输出Json数据格式的两种常用方式
- 2025-01-02 剖析Selenium代码执行时元素查找失败的缘由
- 2025-01-02 H5的Canvas绘图——使用fabricjs绘制一个可多选的随机9宫格
- 2025-01-02 jscanify:支持 Node.js/浏览器/React 移动文档扫描仪
- 2025-01-02 js事件机制详解
- 2025-01-02 Java ArrayList用法详解附代码示例
- 2025-01-02 如何用枚举快速提高编程效率,数据元素快速对应,小枚举大作用
- 05-16在实际操作过程中如何避免出现SQL注入漏洞
- 05-16MySQL中 in数量限制
- 05-16一文讲懂SQL筛选子句HAVING子句
- 05-16性能调优实战:Spring Boot 多线程处理SQL IN语句大量值的优化方案
- 05-16sqlserver数据库中的模糊查询like和通配符的使用
- 05-16SQL必备 和 表关联
- 05-16SQL Server优化50法
- 05-16他们一直都在!最新强军大片来了
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)