Selenium基础
开始
Selenium是一个用于自动化Web浏览器操作的工具,广泛应用于Web应用程序测试、网页数据抓取和任务自动化等场景
Selenium通过使用WebDriver支持市场上所有主流浏览器的自动化。WebDriver是一个API和协议,它定义了一个语言中立的接口,用于控制web浏览器的行为。每个浏览器都有一个特定的WebDriver实现,称为驱动程序。驱动程序是负责委派给浏览器的组件,并处理与Selenium和浏览器之间的通信
安装selenium
1
pip install selenium
使用npm安装ChromeDriver或EdgeDriver
1
2
npm i -g chromedriver
npm i -g edgedriver
使用selenium完成浏览器启动和关闭
1
2
3
4
5
6
7
from selenium import webdriver
import time
driver = webdriver.Chrome() # 创建浏览器会话
driver.get('https://www.baidu.com') # 访问网页
time.sleep(5)
driver.quit() # close()方法也可关闭浏览器,但在官方文档中建议使用quit()方法
浏览器选项
创建浏览器会话时,可以传入浏览器选项参数,使用浏览器选项类来包装
1
2
3
4
5
6
options = webdriver.ChromeOptions() # 创建选项类对象
# 设置options
options.browser_version = 'stable' # 效果同set_capability('browserVersion', 'stable')
options.set_capability('pageLoadStrategy', PageLoadStrategy.eager) # value也可传入'eager'
options.add_argument('--headless') # 设置无头浏览器
driver = webdriver.Chrome(options=options)
选项类可以设置两类参数
Capabilities:表示浏览器特性及系统的配置
该类参数通过
BaseOptions
类包装- 直接设置配置项属性
set_capability()
:设置配置项capabilities
:获取当前浏览器的所有capabilities配置
对于特定浏览器,options中包含了默认的capabilities配置,默认配置在
desired_capabilities.py
中定义W3C文档中定义的Capabilities配置见:WebDriver (w3c.github.io)
Selenium中设置Capabilities配置见:浏览器选项
Arguments:浏览器启动参数
该类参数通过
ArgOptions
类包装add_argument()
:设置启动参数arguments
:获取当前浏览器的所有arguments
不同浏览器定义的arguments不同,具体参数应查看具体浏览器的文档,见文档:支持的浏览器列表
ChromeOptions类文档:ChromeOptions
Chrome启动参数文档:List of Chromium Command Line Switches
查找元素
selenium使用两个方法来查找DOM元素
find_element
:查找单个元素,若匹配多个元素,仅返回第一个find_elements
:查找多个元素
两个方法都接收两个参数
by
:查找策略,传入一个字符串或By
枚举类value
:匹配值
1
2
3
4
5
6
7
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
element = driver.find_element(By.ID, 'my_id') # 查找id='my-id'的元素
elements = driver.find_elements(By.CLASS_NAME, 'my_class') # 查找class='my-class'的元素
By枚举类包含以下值
ID = 'id'
:根据id属性匹配XPATH = 'xpath'
:根据xpath表达式匹配LINK_TEXT = 'link text'
:根据超链接标签文本精确匹配PARTIAL_LINK_TEXT = 'partial link text'
:根据超链接标签文本模糊匹配NAME = 'name'
:根据name属性匹配TAG_NAME = 'tag name'
:根据标签名称匹配CLASS_NAME = 'class name'
:根据class属性等值匹配CSS_SELECTOR = 'css selector'
:根据css选择器匹配
获取元素信息
查找元素返回的元素对象为WebElement
类型,通过该对象可以获取元素的信息
is_enabled()
:元素是否可用is_selected()
:元素是否选中is_displayed()
:元素是否显示tag_name
:元素标签名称text
:元素文本内容get_attribute('attr')
:获取元素属性值
元素交互
调用WebElement对象的相关方法进行交互
click()
:点击send_keys()
:发送内容,对于可编辑元素,发送编辑内容clear()
:清空,元素需要是可编辑、可重置的
ActionChains交互
ActionChains将一系列键盘和鼠标操作存储在一个队列中,在调用perform()
方法后,依次执行操作
1
2
3
4
5
6
7
8
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
.move_to_element(clickable)\
.pause(1)\
.click_and_hold()\
.pause(1)\
.send_keys("abc")\
.perform()
键盘操作见文档:键盘操作
鼠标操作见文档:Mouse actions