install:: pip3 install selenium import:: from selenium import webdriver doc:: Selenium
类似: Selenium Wire
前提
安装 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 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from 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 pping
from 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
API
driver.page_source
:查看网页源码- click(): 点击
等待
# 强制等待
time.sleep(10)
# 隐式等待(只需设置一次,对整个 driver 周期有效)
driver.implicitly_wait(10) # 最长等 10秒
# 显式等待
问题
- 法打开“chromedriver”,因为无法验证开发者。
解决:
xattr -d com.apple.quarantine /usr/local/bin/chromedriver