杰瑞科技汇

Python WebDriver如何正确配置?

目录

  1. 前置准备:安装 Python 和浏览器
  2. 核心步骤:安装 Selenium 库
  3. 下载 WebDriver 浏览器驱动
    • Chrome (ChromeDriver)
    • Firefox (GeckoDriver)
    • Edge (EdgeDriver)
    • Safari (SafariDriver - 特殊)
  4. 编写第一个 WebDriver 脚本
  5. 高级配置与最佳实践
    • 使用 Service 对象(推荐方式)
    • 设置浏览器启动选项
    • 使用 WebDriver Manager(强烈推荐,告别手动下载)
    • 无头模式
    • 设置窗口大小
    • 配置下载路径
  6. 常见问题与解决方案

前置准备:安装 Python 和浏览器

在开始之前,请确保您的电脑上已经安装了:

Python WebDriver如何正确配置?-图1
(图片来源网络,侵删)
  • Python: 建议使用 Python 3.6+ 版本,您可以从 Python 官网 下载并安装。
  • 浏览器: 您需要安装一个浏览器,Chrome、Firefox 或 Edge,本指南将以 Chrome 和 Firefox 为例。

您可以通过在终端或命令提示符中运行 python --versionpython3 --version 来检查 Python 是否已安装。


核心步骤:安装 Selenium 库

Selenium 是一个用于自动化 Web 浏览器的 Python 库,您需要通过 pip(Python 的包管理器)来安装它。

打开您的终端或命令提示符,运行以下命令:

# 安装最新版本的 Selenium
pip install selenium

下载 WebDriver 浏览器驱动

WebDriver 是一个独立的可执行程序,它充当 Selenium 和浏览器之间的“翻译官”,您需要为您的浏览器下载对应的驱动程序。

Python WebDriver如何正确配置?-图2
(图片来源网络,侵删)

重要概念: WebDriver 的版本需要与您的浏览器版本大致匹配,Chrome 120 版本最好使用 ChromeDriver 120 版本。

手动下载(传统方式)

Chrome (ChromeDriver)

  1. 查看 Chrome 版本:打开 Chrome 浏览器,点击右上角三个点 -> 帮助 -> Google Chrome,记下版本号(120.0.6099.130)。
  2. 下载驱动:访问 Chrome for Testing availability,这是一个官方提供的驱动下载页面。
    • 找到与您 Chrome 版本最匹配的 chromedriver 版本。
    • 根据您的操作系统(Win32, x64, mac-x64, mac-arm64)下载对应的 ZIP 压缩包。
  3. 配置路径
    • 将解压后的 chromedriver.exe (Windows) 或 chromedriver (macOS/Linux) 文件放置在一个固定的目录下,C:\WebDrivers\
    • 方法 A (推荐):将该目录添加到系统的环境变量 PATH 中,这样 Python 就可以在任何位置找到它。
    • 方法 B:在代码中指定该文件的完整路径。

Firefox (GeckoDriver)

  1. 查看 Firefox 版本:打开 Firefox,点击右上角三条横线 -> 帮助 -> Firefox,记下版本号。
  2. 下载驱动:访问 GeckoDriver 下载页面
    • 下载与您 Firefox 版本和操作系统匹配的 geckodriver 压缩包。
  3. 配置路径:与 ChromeDriver 相同,将 geckodriver 放入一个固定目录并添加到 PATH,或在代码中指定路径。

使用 WebDriver Manager(强烈推荐)

手动下载和管理驱动版本非常繁琐。webdriver-manager 是一个第三方库,可以自动下载、管理和配置正确的 WebDriver 版本。

安装它:

pip install webdriver-manager

这样,您就无需再手动下载任何驱动文件了,webdriver-manager 会在运行脚本时自动处理。

Python WebDriver如何正确配置?-图3
(图片来源网络,侵删)

编写第一个 WebDriver 脚本

这里我们提供一个使用 手动下载webdriver-manager 两种方式的脚本示例。

示例 1:使用手动下载的驱动

假设您已经将 chromedriver.exe 放在了 C:\WebDrivers\ 目录下,并且该目录已添加到系统 PATH

# 1. 导入必要的库
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import time
# 2. 指定驱动路径 (如果未添加到PATH)
# driver_path = "C:/WebDrivers/chromedriver.exe" 
# service = ChromeService(executable_path=driver_path)
# 如果驱动已在PATH中,可以省略 executable_path
service = ChromeService() 
# 3. 初始化 WebDriver
driver = webdriver.Chrome(service=service)
# 4. 打开一个网页
driver.get("https://www.baidu.com")
# 5. 进行一些操作
# 找到搜索框输入框
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Selenium")
# 找到“百度一下”按钮并点击
search_button = driver.find_element(By.ID, "su")
search_button.click()
# 等待3秒,观察结果
time.sleep(3)
# 6. 关闭浏览器
driver.quit()

示例 2:使用 webdriver-manager(现代方式)

这种方式更简单、更健壮,推荐新手和项目使用。

# 1. 导入必要的库
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time
# 2. 自动下载并设置驱动
# ChromeDriverManager().install() 会自动下载并返回驱动路径
service = ChromeService(ChromeDriverManager().install())
# 3. 初始化 WebDriver
driver = webdriver.Chrome(service=service)
# 4. 后续步骤与手动方式完全相同
driver.get("https://www.baidu.com")
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Selenium")
search_button = driver.find_element(By.ID, "su")
search_button.click()
time.sleep(3)
# 5. 关闭浏览器
driver.quit()

高级配置与最佳实践

使用 Service 对象(推荐方式)

从 Selenium 4.6.0 开始,推荐使用 Service 对象来管理驱动程序的配置,而不是直接在 WebDriver 初始化时传递 executable_path,上面的示例已经展示了这种方式。

设置浏览器启动选项

您可以在启动浏览器前设置各种选项,例如无头模式、禁用图片、指定下载路径等。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
# 创建选项对象
options = Options()
# 1. 无头模式 (不显示浏览器界面)
# options.add_argument("--headless")
# 2. 禁用图片加载 (可以提高页面加载速度)
# prefs = {"profile.managed_default_content_settings.images": 2}
# options.add_experimental_option("prefs", prefs)
# 3. 设置窗口大小
options.add_argument("--window-size=1920,1080")
# 4. 指定用户代理
# options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
# 初始化 WebDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
driver.get("https://www.example.com")
print(driver.title)
driver.quit()

无头模式

无头模式运行浏览器时不会显示图形界面,非常适合在服务器或 CI/CD 环境中运行。

只需在 options 中添加一行即可: options.add_argument("--headless")

设置窗口大小

为了确保在不同分辨率下元素定位的准确性,通常需要设置一个固定的窗口大小。

options = Options()
options.add_argument("--window-size=1920,1080")
# 或者
# driver.maximize_window() # 最大化窗口

配置下载路径

这是一个非常实用的功能,可以指定文件的下载目录。

from selenium.webdriver.chrome.options import Options
options = Options()
prefs = {
    "download.default_directory": "C:/Users/YourUser/Downloads", # 你的下载路径
    "download.prompt_for_download": False, # 不弹出下载确认框
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True # 启用安全浏览
}
options.add_experimental_option("prefs", prefs)
# 然后在初始化 driver 时传入 options
# driver = webdriver.Chrome(service=service, options=options)

常见问题与解决方案

问题 1:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

  • 原因:Python 找不到 chromedriver.exe 文件。
  • 解决方案
    1. 最佳方案:使用 webdriver-manager 库,它会自动处理路径。
    2. 手动方案:确保 chromedriver.exe 文件已下载,并将其所在的目录添加到系统的环境变量 PATH 中。
    3. 代码方案:在代码中明确指定 chromedriver.exe 的完整路径。

问题 2:This version of ChromeDriver only supports Chrome version XXX

  • 原因:您的 Chrome 浏览器版本和 ChromeDriver 版本不匹配。
  • 解决方案
    1. 最佳方案:更新 webdriver-manager,它会自动下载匹配的版本。
    2. 手动方案:去 Chrome for Testing availability 页面下载与您浏览器版本一致的 ChromeDriver。

问题 3:脚本运行非常慢

  • 原因:页面加载、元素查找都可能耗时。

  • 解决方案

    1. 隐式等待:在初始化 driver 后设置一个全局等待时间,在查找元素时,如果元素没有立即出现,它会等待最多指定的时间。

      driver.implicitly_wait(10) # 等待最多10秒
    2. 显式等待:更精确地等待某个特定条件满足(如元素可见、可点击),这是更推荐的方式。

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      # 等待最多10秒,直到ID为"myDynamicElement"的元素出现
      element = WebDriverWait(driver, 10).until(
          EC.presence_of_element_located((By.ID, "myDynamicElement"))
      )
    3. 禁用图片/动画:如上所述,通过 options 禁用非必要资源加载。

希望这份详细的指南能帮助您成功配置和使用 Python WebDriver!祝您编码愉快!

分享:
扫描分享到社交APP
上一篇
下一篇