Selenium Python 教程
本文最后更新于:2024年9月16日 下午
准备工作
1.安装 selenium
1 |
|
2.下载浏览器驱动
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver , taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
需要把浏览器驱动放入系统路径中,或者直接告知selenuim的驱动路径
3.简单示例:
1 |
|
元素定位
1 |
|
** 浏览器中选择元素后,右键Copy可以选择获取到selector和xpath **
控制浏览器操作
- 控制浏览器窗口大小
driver.set_window_size(768,1024)
- 浏览器前进后退
driver.back()
driver.forward()
- 刷新
driver.refresh()
Webelement常用方法
- 点击和输入
1
driver.find_element_by_id("kw").clear() # 清除文本 driver.find_element_by_id("kw").send_keys("selenium") # 模拟按键输入 driver.find_element_by_id("su").click() # 点击元素
- 提交
1
search_text = driver.find_element_by_id('kw') search_text.send_keys('selenium') search_text.submit()
- 其它
size:返回元素的尺寸
text:返回元素的文本
get_attribute(name):获得属性值
id_displayed():设置该元素是否用户可见
鼠标操作
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
ActionChains 类提供了鼠标操作的常用方法:
- perform():执行所有ActionChains中存储的行为
- context_click():右击
- double_click():双击
- drag_and_drop():拖动
- move_to_element():鼠标悬停
例如: 1
2
3
4
5
6
7
8
9
10
11from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Edge()
driver.get("https://www.baidu.cn")
# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
键盘事件
以下为常用的键盘操作:
- send_keys(Keys.BACK_SPACE) 删除键
- send_keys(Keys.SPACE) 空格键
- send_keys(Keys.TAB) 制表键
- send_keys(Keys.ESCAPE) 回退键
- send_keys(Keys.ENTER) 回车键
- send_keys(Keys.CONTROL,'a') 全选
- send_keys(Keys.CONTROL,'c') 复制
- send_keys(Keys.CONTROL,'x') 剪切
- send_keys(Keys.CONTROL,'v') 粘贴
- send_keys(Keys.F1) 键盘 F1
获取断言信息
1 |
|
等待页面加载完成
- 显示等待
显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。
1
2
3
4
5
6
7
8
9
10
11 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.Edge()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, "kw"))
)
element.send_keys('selenium')
driver.quit()
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。
在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。
隐式等待
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
1
2
3
4
5 from selenium import webdriver
driver = webdriver.Edge()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
在不同的窗口和框架之间移动
1 |
|
以直接取表单的id
或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位:
1
2
3
4
5#先通过xpth定位到iframe
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
#再将定位对象传给switch_to_frame()方法
driver.switch_to_frame(xf)1
driver.switch_to_default_content()
警告框处理
1 |
|
text:返回 alert/confirm/prompt 中的文字信息。
accept():接受现有警告框。
dismiss():解散现有警告框。
send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
下拉框选择
1 |
|
文件上传
1 |
|
Cookies操作
WebDriver操作cookie的方法:
- get_cookies(): 获得所有cookie信息。
- get_cookie(name): 返回字典的key为“name”的cookie信息。
- add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
- delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。
- delete_all_cookies(): 删除所有cookie信息
调用JavaScript代码
1 |
|
窗口截图
1 |
|
关闭浏览器
- close() 关闭单个标签
- quit() 关闭所有标签
直接用cookie登录方法
https://www.jianshu.com/p/773c58406bdb
原文链接
https://zhuanlan.zhihu.com/p/111859925
https://selenium-python-zh.readthedocs.io/en/latest/navigating.html