Selenium 的使用
Selenium 是一系列工具和库的综合项目,这些工具和库支持 web 浏览器的自动化。
WebDriver 使用浏览器供应商提供的浏览器自动化 API 来控制浏览器和运行测试,这就像真正的用户正在操作浏览器一样。
在 python 语境中所聊到的 Selenium 大概率是指 WebDriver 的使用。
Selenium 官网地址:https://www.selenium.dev/zh-cn/documentation/overview/
Selenium-Python 文档地址:https://selenium-python.readthedocs.io/index.html
Selenium-Python 中文文档地址(旧版未更新,仅作参考):https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html
1. 安装
pip install selenium
2. 以 Firefox 浏览器为例
请先确保系统安装了 Firefox 浏览器
2.1 下载 geckodriver
下载地址:https://github.com/mozilla/geckodriver/releases/
以 windows 系统为例:
- 下载
geckodriver-{version}-win64.zip
文件 - 解压后得到
geckodriver.exe
文件 - 将此
geckodriver.exe
文件加入到环境变量中(可选操作)
2.2 代码示例
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get('https://python-abc.xyz/code/5127/')
elem = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[2]/p[2]/a')
url = elem.get_attribute('href')
print(url)
elem.click()
关于 executable_path
参数:
# geckodriver.exe 加入到了环境变量就可以直接这样使用
# driver = webdriver.Firefox()
# 如果没有加入到环境变量,就要指定 executable_path 参数
# driver = webdriver.Firefox(
# executable_path=r'path\to\geckodriver.exe')
3. 语法介绍
3.1 查找元素
https://selenium-python.readthedocs.io/locating-elements.html
注意: 新版的已经不推荐使用 find_element_by_*
方式了。
方法 | 含义 | 示例 |
---|---|---|
find_element() | 查找单个元素 | driver.find_element('tag name', 'h1') |
find_elements() | 查找多个元素 | driver.find_elements('xpath', '//*[@id="convertd"]/tr/td[1]') |
第一个元素为查找的方式,取值可为:
通过 By 属性 | 直接通过字符串 | 含义 |
---|---|---|
By.ID | "id" | 通过 ID 查找元素 |
By.NAME | "name" | 通过 Name 查找元素 |
By.XPATH | "xpath" | 通过 XPath 查找元素 xpath 地址可以通过浏览器按 F12 检查元素之后复制得来 |
By.LINK_TEXT | "link text" | 通过链接文本获取超链接 |
By.PARTIAL_LINK_TEXT | "partial link text" | 同上,但可部分匹配 |
By.TAG_NAME | "tag name" | 通过标签名查找元素 |
By.CLASS_NAME | "class name" | 通过 Class name 定位元素 |
By.CSS_SELECTOR | "css selector" | 通过 CSS 选择器查找元素 |
By
需要导入:
from selenium.webdriver.common.by import By
3.2 driver 的方法和属性
https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webdriver
方法/属性 | 含义 |
---|---|
get (url: str) → None | 加载网页 |
close () → None | 关闭当前窗口 |
find_element (by='id', value=None) | 查找给定 By 策略和定位器的元素 |
find_elements (by='id', value=None) | 查找给定 By 策略和定位器的所有元素 |
execute_script (script, *args) | 在当前窗口/框架中同步执行 JavaScript 脚本代码 |
set_window_size (width, height, windowHandle='current') → dict | 设置当前窗口的宽度和高度 |
还有获取 cookie、窗口大小、截图等方法,这里就不一一列举了,可自行查看文档
3.3 页面元素的方法和属性
https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement
方法/属性 | 含义 |
---|---|
clear () → None | 清除文本 |
click () → None | 单击元素 |
find_element (by='id', value=None) | 查找给定 By 策略和定位器的元素 |
find_elements (by='id', value=None) | 查找给定 By 策略和定位器的所有元素 |
get_attribute (name) → str | 获取元素的给定属性 |
send_keys (*value) → None | 模拟输入 |
text | 元素的文本 |
还有其它一些属性与方法,这里就不一一列举了,可自行查看文档