install:: pip3 install selenium import:: from selenium import webdriver doc:: Selenium


类似: Selenium Wire

前提

安装 Chrome

  • macOSbrew 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

# 获取版本
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

参考