Skip to content

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. 安装

bash
pip install selenium

2. 以 Firefox 浏览器为例

请先确保系统安装了 Firefox 浏览器

2.1 下载 geckodriver

下载地址:https://github.com/mozilla/geckodriver/releases/
以 windows 系统为例:

  1. 下载 geckodriver-{version}-win64.zip 文件
  2. 解压后得到 geckodriver.exe 文件
  3. 将此 geckodriver.exe 文件加入到环境变量中(可选操作)

2.2 代码示例

python
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 参数:

python
# 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 需要导入:

python
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元素的文本

还有其它一些属性与方法,这里就不一一列举了,可自行查看文档