杰瑞科技汇

Selenium Python配置步骤有哪些?

Selenium Python 配置完整指南

本指南将带你一步步完成 Selenium 的环境配置,并成功运行你的第一个自动化测试脚本。

Selenium Python配置步骤有哪些?-图1
(图片来源网络,侵删)

第一步:环境准备

在开始之前,请确保你已经安装了以下工具:

  1. Python:

    • Selenium 是一个 Python 库,所以你必须先安装 Python。
    • 前往 Python 官网 下载并安装最新稳定版。
    • 重要: 安装时,请务必勾选 "Add Python to PATH" (将 Python 添加到环境变量) 选项,这样你就可以在命令行中直接使用 python 命令。
  2. 包管理工具 (pip):

    • pip 是 Python 的包安装工具,Python 安装时会自动自带,你可以在命令行中输入 pip --version 来检查是否已安装。
  3. 代码编辑器 (IDE):

    Selenium Python配置步骤有哪些?-图2
    (图片来源网络,侵删)
    • 一个好的编辑器能让你更高效地编写代码,推荐使用:
      • Visual Studio Code (VS Code): 免费、功能强大,插件生态丰富。
      • PyCharm: 专业的 Python IDE,社区版免费。
      • Sublime Text: 轻量级,启动迅速。

第二步:安装 Selenium 库

这是最核心的一步,我们将使用 pip 来安装 Selenium。

  1. 打开终端/命令行:

    • Windows: 打开 "命令提示符" (CMD) 或 "PowerShell"。
    • macOS: 打开 "终端" (Terminal)。
    • Linux: 打开终端。
  2. 执行安装命令: 在终端中输入以下命令并按回车:

    pip install selenium
    • 如果你的系统中有多个 Python 版本,你可能需要使用 pip3 来确保安装到正确的 Python 3 环境中:
      pip3 install selenium
  3. 验证安装: 安装完成后,你可以通过以下命令来验证 Selenium 是否已成功安装:

    pip show selenium

    如果看到版本号等信息,说明安装成功。


第三步:下载浏览器驱动

Selenium 本身不控制浏览器,它通过一个叫做 WebDriver 的中间件来与浏览器进行通信,你需要为你要使用的浏览器下载对应的驱动程序。

以最常用的 Chrome 浏览器为例:

  1. 检查 Chrome 版本:

    • 打开 Chrome 浏览器。
    • 点击右上角的三个点 -> “帮助” -> “Google Chrome”。
    • 记下你的 Chrome 版本号(0.6312.58)。
  2. 下载 ChromeDriver:

    • 访问 ChromeDriver 的官方下载页面:https://googlechromelabs.github.io/chrome-for-testing/
    • 在这个页面,找到与你 Chrome 版本最匹配的 chromedriver
    • 下载对应你操作系统和 Python 架构(64位或32位)的文件,通常下载 win64mac-x64 即可。
    • 下载的是一个 .zip 压缩包。
  3. 配置 ChromeDriver:

    • 方法一(推荐,无需配置环境变量):
      • 将下载的 chromedriver.exe (Windows) 或 chromedriver (macOS/Linux) 文件解压出来。
      • 将这个文件放在你的 Python 脚本所在的同一个文件夹里,这样 Selenium 就能自动找到它。
    • 方法二(配置环境变量):
      • 将解压出的 chromedriver.exechromedriver 文件放到一个固定的路径下(C:\WebDriver)。
      • 将这个路径添加到系统的环境变量 PATH 中,这样你就可以在任何地方运行它。

第四步:编写并运行你的第一个脚本

万事俱备,让我们来写代码!

  1. 创建一个 Python 文件: 在你的项目文件夹中创建一个新文件,命名为 first_script.py

  2. 编写脚本代码: 将以下代码复制到 first_script.py 文件中。

    # 1. 导入所需的库
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.common.exceptions import NoSuchElementException
    import time
    # 2. 设置 ChromeDriver 的路径
    # 如果你把 chromedriver.exe 放在了脚本同目录下,可以直接用文件名
    # 如果放在了系统环境变量 PATH 中,这里可以省略
    # CHROMEDRIVER_PATH = './chromedriver'  # Windows: './chromedriver.exe'
    # SERVICE = Service(executable_path=CHROMEDRIVER_PATH)
    # 3. 配置浏览器选项(可选)
    chrome_options = Options()
    # 设置为无头模式,即在后台运行,不弹出浏览器窗口
    # chrome_options.add_argument('--headless') 
    # 禁用图片加载,可以加快速度
    # chrome_options.add_argument('--blink-settings=imagesEnabled=false') 
    # 解决一些 SSL 证书问题
    chrome_options.add_argument('--ignore-certificate-errors') 
    # 4. 初始化 WebDriver
    # 如果你使用了 Service 对象,需要传入 service 参数
    # driver = webdriver.Chrome(service=SERVICE, options=chrome_options)
    # chromedriver 在 PATH 中,可以直接这样写
    driver = webdriver.Chrome(options=chrome_options)
    try:
        # 5. 打开目标网页
        print("正在打开百度首页...")
        driver.get("https://www.baidu.com")
        # 6. 验证页面标题
        assert "百度一下" in driver.title
        print("成功打开百度首页!")
        # 7. 找到搜索框元素
        # 使用 By.NAME 定位,因为百度搜索框的 name 属性是 'wd'
        search_box = driver.find_element(By.NAME, 'wd')
        # 8. 在搜索框中输入文字
        print("正在输入搜索关键词:Selenium Python")
        search_box.send_keys("Selenium Python")
        # 9. 模拟按下回车键进行搜索
        search_box.send_keys(Keys.RETURN)
        # 10. 等待几秒钟,以便查看搜索结果
        print("等待 3 秒以显示搜索结果...")
        time.sleep(3) # 强制等待,不推荐在生产代码中使用,仅用于演示
        # 11. 验证搜索结果页面
        assert "Selenium Python" in driver.title
        print("搜索完成,页面标题已更新。")
    finally:
        # 12. 关闭浏览器
        print("正在关闭浏览器...")
        driver.quit()
  3. 运行脚本:

    • 打开终端/命令行。
    • 使用 cd 命令切换到你的脚本所在的目录。
    • 运行脚本:
      python first_script.py

如果一切顺利,你将看到 Chrome 浏览器自动打开,访问百度,输入“Selenium Python”,然后回车,最后自动关闭,终端中也会打印出相应的日志信息。


第五步:核心概念解析

  • webdriver.Chrome(): 这是创建一个 Chrome 浏览器实例的入口,它会启动一个浏览器进程。
  • driver.get(url): 导航到指定的 URL。
  • *`driver.find_element(By., 'value')`**: 定位页面上的单个元素。
    • By 是一个枚举类,提供了多种定位方式:
      • By.ID: 通过元素的 id 属性定位(最快、最推荐)。
      • By.NAME: 通过元素的 name 属性定位。
      • By.CLASS_NAME: 通过元素的 class 属性定位。
      • By.TAG_NAME: 通过 HTML 标签名定位(如 div, a)。
      • By.XPATH: 通过 XPath 路径定位(非常强大,但语法较复杂)。
      • By.CSS_SELECTOR: 通过 CSS 选择器定位(推荐,比 XPath 更简洁)。
  • **`element.send_keys(keys)``: 在元素中输入文本或模拟按键。
  • driver.quit() vs driver.close():
    • driver.quit(): 关闭整个浏览器进程,释放所有资源。强烈推荐在脚本结束时使用
    • driver.close(): 只关闭当前活动的标签页或窗口,如果只有一个窗口,效果和 quit 一样,但如果有多个窗口,只会关闭当前这一个。
  • 等待策略: time.sleep() 是“硬性等待”,它会让脚本暂停固定时间,不管元素是否已经加载好,这会导致效率低下且不稳定,更好的方式是“显式等待” (Explicit Wait),它会等待某个条件满足(如元素可见)后再继续执行,超时则抛出异常。

显式等待示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待最多10秒,直到id为'myDynamicElement'的元素出现
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'myDynamicElement'))
    )
    print("元素已找到!")
except NoSuchElementException:
    print("在10秒内未找到元素!")

常见问题与解决方案

  1. selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version X

    • 原因: 你的 Chrome 浏览器版本和下载的 ChromeDriver 版本不匹配。
    • 解决: 重新访问 Chrome for Testing 下载与你当前 Chrome 版本完全一致的 ChromeDriver。
  2. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

    • 原因: Selenium 找不到 chromedriver.exe 文件。
    • 解决:
      • 简单方法: 将 chromedriver.exe 文件复制到你的 Python 脚本同目录下。
      • 标准方法: 将 chromedriver.exe 所在的文件夹路径添加到系统的 PATH 环境变量中。
  3. 脚本运行时,浏览器一闪而过,没有执行任何操作就关闭了。

    • 原因: 代码中可能出现了未捕获的异常,导致 try...finally 块中的 finally 部分被执行,从而调用了 driver.quit()
    • 解决: 仔细检查你的代码,确保所有可能出错的步骤都被 try...except 包裹,并打印出异常信息,以便定位问题。
  4. 定位元素失败,报 NoSuchElementException

    • 原因:
      • 元素选择器写错了。
      • 页面加载太慢,脚本在元素出现前就开始查找。
      • 元素在 <iframe> 内,需要先切换到该 iframe
      • 元素被其他元素遮挡(如弹窗)。
    • 解决:
      • 使用浏览器开发者工具(F12)检查元素,确保选择器正确。
      • 使用 显式等待 代替硬性等待。
      • 如果元素在 iframe 中,先执行 driver.switch_to.frame('frame_name_or_id'),操作完成后再用 driver.switch_to.default_content() 切换回来。

希望这份详细的指南能帮助你成功配置并开始使用 Selenium Python!祝你自动化测试顺利!

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