selenium 是一个用于自动化测试的 [[Python]] 库。
安装
pip install selenium
安装 Chrome
- [[macOS]]:
brew install google-chrome
- [[CentOS]] :
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
- [[Ubuntu]] :
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb
安装完成后通过 googlechrome --version
查看版本号
下载 Chromedriver
- Chromedriver
- 国内镜像:淘宝
# 获取版本LATEST=$(wget -q -O - http://chromedriver.storage.googleapis.com/LATEST_RELEASE)wget http://chromedriver.storage.googleapis.com/$LATEST/chromedriver_linux64.zip# 解压unzip chromedriver_linux64.zip# 赋予执行权限chmod +x chromedriver# 拷贝指定目录sudo mv chromedriver /usr/local/bin/
# 查看版本号chromedriver --version
自动安装管理
pip install webdriver-manager
使用
# selenium 4from selenium import webdriverfrom selenium.webdriver.chrome.service import Service as ChromeServicefrom webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
注:下载会使用 googleapis.com 地址,需先修改对应 hosts
配置
- 位置:
/usr/local/bin/chromedriver
[[macOS]] - 配置路径:`webdriver.Chrome(executable_path=‘/usr/local/bin/chromedriver’)
功能参数
日志
from pping import ppingfrom selenium.webdriver import DesiredCapabilities
caps = { 'goog:loggingPrefs': {'performance': 'ALL'} # 记录性能日志}driver = webdriver.Chrome(desired_capabilities=caps)
driver.get('https://httpbin.org/get')logs = driver.get_log("performance")for item in logs: log = json.loads(item["message"])["message"] pprint(log)
定位元素
find_element()
- ID: “id”
- XPATH: “xpath”
- LINK_TEXT: “link text”
- PARTIAL_LINK_TEXT: “partial link text”
- NAME: “name”
- TAG_NAME: “tag name”
- CLASS_NAME: “class name”
- CSS_SELECTOR: “css selector”
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')driver.find_elements(By.XPATH, '//button')
单元素
- find_element_by_link_text: 链接
- find_element_by_partial_link_text: 链接(可部分匹配)
- find_element_by_tag_name: 标签名
- find_element_by_css_selector: CSS 选择器
- find_element_by_id: 根据 ID 获取
driver.find_element_by_id('id').get_attribute()
(未测试) - find_element_by_class_name: 根据类名
- find_element_by_name: 根据名称
- find_element_by_xpath
driver.find_element_by_xpath('/html/head/title').text
:获取指定标签下的文本数据(字符串)
多元素
将返回列表
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
等待
# 强制等待time.sleep(10)# 隐式等待(只需设置一次,对整个 driver 周期有效)driver.implicitly_wait(10) # 最长等 10秒# 显式等待
API
driver.page_source
:查看网页源码- click(): 点击
问题
- 法打开“chromedriver”,因为无法验证开发者。
解决:
xattr -d com.apple.quarantine /usr/local/bin/chromedriver