使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作

使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作是 Web 自动化测试和爬虫的常用方法之一。以下是一个完整的入门教程,包括如何安装、配置以及一些示例代码。

1. 安装所需环境

1.1 安装 Selenium

使用 pip 安装 Selenium:

pip install selenium

1.2 下载 ChromeDriver

  • 根据你电脑上 Google Chrome 的版本下载对应的 ChromeDriver
    1. 打开 Chrome 浏览器 检查版本号。
    2. 前往 ChromeDriver 下载页面
    3. 下载与 Chrome 版本匹配的 ChromeDriver,并解压到一个路径。

1.3 配置 ChromeDriver 路径

  • 将 ChromeDriver 放置到环境变量路径中(推荐)。
  • 或在代码中指定其绝对路径。

2. 基本用法

2.1 导入和启动浏览器

以下是一个简单的示例:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

# 配置 ChromeDriver 的路径
chromedriver_path = "/path/to/chromedriver"

# 创建 WebDriver 对象
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service)

# 打开一个网页
driver.get("https://www.google.com")

# 等待 5 秒后关闭浏览器
time.sleep(5)
driver.quit()

3. 常见功能示例

3.1 查找元素

Selenium 提供多种方式定位网页元素:

  • By.ID
  • By.NAME
  • By.CLASS_NAME
  • By.TAG_NAME
  • By.XPATH
  • By.CSS_SELECTOR

示例:

# 打开 Google
driver.get("https://www.google.com")

# 查找搜索框(通过 name 属性)
search_box = driver.find_element(By.NAME, "q")

# 输入搜索内容
search_box.send_keys("Selenium Python")

# 提交搜索
search_box.submit()

3.2 等待元素加载

为了确保元素加载完成,推荐使用显式等待:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待某个元素出现(最多等 10 秒)
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.NAME, "q")))

4. 高级功能

4.1 设置浏览器选项

可以通过 Options 配置浏览器行为:

from selenium.webdriver.chrome.options import Options

# 配置无头模式(Headless)
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")

# 使用配置启动浏览器
driver = webdriver.Chrome(service=service, options=options)

4.2 执行 JavaScript

可以通过 Selenium 执行自定义 JavaScript:

# 执行 JavaScript 获取页面标题
title = driver.execute_script("return document.title;")
print(f"Page Title: {title}")

4.3 截屏

保存当前页面的截图:

driver.save_screenshot("screenshot.png")

5. 关闭浏览器

使用以下方法确保资源释放:

# 关闭当前窗口
driver.close()

# 退出浏览器并释放资源
driver.quit()

6. 常见问题与解决方案

6.1 异常:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

  • 原因:未配置 ChromeDriver 路径。
  • 解决:
    • 确保 ChromeDriver 在系统 PATH 中。
    • 或在代码中提供 ChromeDriver 的绝对路径。

6.2 浏览器版本不兼容

6.3 页面加载超时

  • 增加页面加载超时时间:python复制代码
driver.set_page_load_timeout(30)  # 设置为 30 秒

6.4 无法定位元素

  • 确认定位方式是否正确,或元素是否存在。
  • 使用显式等待确保元素加载完成。

7. 示例:完整搜索自动化脚本

以下脚本将自动打开 Google,搜索 “Python Selenium”,并打印搜索结果的标题:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 配置 ChromeDriver 路径
chromedriver_path = "/path/to/chromedriver"
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service)

try:
    # 打开 Google
    driver.get("https://www.google.com")

    # 等待搜索框加载
    wait = WebDriverWait(driver, 10)
    search_box = wait.until(EC.presence_of_element_located((By.NAME, "q")))

    # 输入搜索内容并提交
    search_box.send_keys("Python Selenium")
    search_box.submit()

    # 等待搜索结果加载
    results = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "h3")))

    # 打印搜索结果标题
    for result in results:
        print(result.text)

finally:
    # 退出浏览器
    driver.quit()

8. 总结

通过 Python Selenium 和 Chrome WebDriver,你可以实现强大的 Web 自动化能力,包括数据抓取、表单填写和页面测试等。对于复杂的页面,可以结合等待机制和 JavaScript 动态操作完成更多任务。如果遇到问题,可以参考 Selenium 官方文档ChromeDriver 文档

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4519

Like (0)
Previous 2024年11月24日 下午10:09
Next 2024年11月25日 上午11:11

相关推荐

  • Unity 项目升级URP/HDRP渲染管线时如何解决材质丢失问题

    在 Unity 项目中升级到 URP(通用渲染管线) 或 HDRP(高清渲染管线) 后,材质丢失是一个常见问题。这通常是因为原来的材质或着色器不兼容新渲染管线,需要手动调整或重新配置。以下是详细的解决方法: 1. 理解渲染管线的变化 2. 自动转换材质(官方工具) Unity 提供了从 Built-in 渲染管线迁移到 URP 或 HDRP 的官方工具,可以…

    2024年11月25日
    00
  • 把一个矩形div变成一个直角三角形

    要将一个矩形 div 变成一个直角三角形,可以通过 CSS 的一些属性进行实现。具体的方法是利用 border 属性来隐藏矩形的部分,留下一个直角三角形的形状。以下是实现的步骤:CSS 方法: 解释:width 和 height 设置为 0:通过将 div 的宽度和高度设置为 0,实际上把矩形的主体部分隐藏了。border-left 和 border-bot…

    2024年11月27日
    00
  • 不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)

    不同版本的 FFmpeg 在使用 videotoolbox 硬件编码时,压缩比差距较大的问题,通常与以下几个因素相关:1. FFmpeg 硬件编码支持的变化:FFmpeg 集成了多种硬件加速技术(例如在 macOS 上使用 videotoolbox),而随着版本的更新,FFmpeg 可能对硬件编码进行了修复、改进或修改,这些变化可能会导致不同版本之间的压缩效…

    2024年11月27日
    00
  • java中使用 Arrays.asList()新增报错问题解决方法

    Arrays.asList() 返回的是一个固定大小的列表。如果你尝试使用该列表进行添加、删除等修改操作,会抛出 UnsupportedOperationException 异常。这是因为 Arrays.asList() 返回的列表背后是一个数组,它的大小是固定的,不能进行动态修改。解决方法使用 ArrayList 包装 Arrays.asList() 的结…

    2024年12月2日
    00
  • 微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查

    在微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查的过程,可以分为以下几个步骤: 1. 准备工作 必要工具: 2. 搭建 Node.js 后端服务 安装依赖 在 Node.js 项目中,使用 npm init 初始化项目,并安装以下依赖: express: 用于搭建 Web 服务。 mysql: 用于连接和操作 MySQL 数据库。 …

    2024年12月9日
    00
  • Java 8 到 Java 17 的升级涉及一些关键变化

    JDK 8 升级到 JDK 17 指南Java 8 到 Java 17 的升级涉及一些关键变化,包括语言特性、API 更新和性能改进。以下是一些升级要点:语法和语言特性:记录类(Record Class):Java 14 引入了记录类,提供了一种简化创建不可变数据对象的方式。密封类(Sealed Classes):Java 15 引入了密封类,允许开发者限制…

    2024年11月27日
    00
  • 解决 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误问题

    在将 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误通常是由于 GitHub Pages 处理路由时的问题。Vue 3 使用 Vue Router 来管理前端路由,而 GitHub Pages 本身是静态托管服务,不支持处理 SPA(单页面应用)的客户端路由。因此,当你直接访问某个页面 URL(比如 https://youruser…

    2024年11月29日
    00
  • 使用 CLion 编写 C51 (即8051微控制器) 程序时,遇到 sbit 相关报错

    在使用 CLion 编写 C51 (即8051微控制器) 程序时,遇到 sbit 相关报错,通常是因为 CLion 默认并不支持8051的特殊语法和寄存器定义方式。sbit 是 C51 编译器中的一个关键字,用来将一个单独的位(bit)映射到特定的硬件寄存器或端口引脚。常见的报错及解决方法sbit 语法问题: CLion 本身不支持 C51 特有的语法,sb…

    2024年11月27日
    00
  • 在 Spring Boot 中实现定时任务,通过 Spring Task Scheduling 来完成

    在 Spring Boot 中实现定时任务,可以通过 Spring Task Scheduling 来轻松完成。Spring 提供了多种方法来调度任务,其中使用 @Scheduled 注解是最常见且简单的方式。 步骤:在 Spring Boot 中实现定时任务 1. 启用定时任务 首先,确保在 Spring Boot 应用的主类或配置类中启用定时任务功能: …

    2024年11月26日
    00
  • 2024最新版 Anaconda 安装方法

    Anaconda 是一个非常流行的数据科学与机器学习平台,包含 Python、常用库、以及环境管理工具 Conda。以下是 2024 年最新版 Anaconda 的安装步骤。 1. 下载 Anaconda 下载地址 2. 安装步骤 Windows 系统 MacOS 系统 Linux 系统 打开终端,定位到下载目录: 运行安装脚本: 执行安装脚本: 许可协议:…

    2024年11月21日
    00
  • 基于 Spring Boot 框架实现微信支付接口调用及回调功能

    实现微信支付接口调用及回调功能,以下是完整的步骤及代码实现,基于 Spring Boot 框架。 1. 微信支付开发准备 开通微信支付 配置 API 安全密钥 前往商户平台的【账户设置】-【API安全】中配置 API 密钥。 2. 集成依赖 在 Spring Boot 项目中添加 HTTP 客户端依赖,例如 RestTemplate 或 OkHttp。也可用…

    2024年11月23日
    00
  • 使用 Python 的 pip 安装 Selenium 和 WebDriver 测试环境

    Selenium 是一个强大的自动化测试工具,广泛用于 Web 应用程序的浏览器操作。以下是完整的 Selenium 教程,帮助初学者理解其基础功能和高级用法。 1. 安装 Selenium 和 WebDriver 1.1 安装 Selenium 使用 Python 的 pip 安装 Selenium: 1.2 下载 WebDriver 根据目标浏览器下载对…

    2024年11月26日
    00
  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • C++ STL vector 类:动态数组的高效应用

    vector 是 C++ 标准库(STL)中最常用的容器之一,它提供了一个动态数组的实现,能够根据需要自动扩展或收缩。vector 是一个线性数据结构,具有高效的随机访问能力和动态扩展能力,广泛应用于需要频繁增删元素且对随机访问要求较高的场景。 1. vector 类简介 vector 是 C++ 标准模板库(STL)中提供的一种容器类,它类似于动态数组(d…

    2024年11月25日
    00
  • 在 Vue3 和 uniapp 的 H5 环境中使用 QRCode.toDataURL() 生成二维码时无法显示的问题

    1. 图片格式或生成的 DataURL 处理问题QRCode.toDataURL() 方法通常会生成一个 Base64 编码的 PNG 图片。某些 Android 浏览器或 WebView 可能对 Base64 编码的图片支持不好,或者由于资源限制无法正常解析。解决方法:尝试通过生成二维码的图片 URL 直接展示而非使用 Base64 编码。可以通过将二维码…

    2024年11月27日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信