使用 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

相关推荐

  • 不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)

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

    2024年11月27日
    00
  • 理解 HTML、HTML5 和 “H5” 区别的重要性

    HTML & HTML5 & H5 的区别在构建现代网页时,理解 HTML、HTML5 和 “H5” 的区别是非常重要的。以下是它们的概念和主要区别: 1. HTML(超文本标记语言)定义HTML 是 HyperText Markup Language 的缩写,即超文本标记语言,用于定义网页内容的结构和含义。特性提供基…

    2024年12月2日
    00
  • 在开发 Angular 项目时,使用 RangeSlider 控件时的常见问题

    在开发 Angular 项目时,使用 RangeSlider 控件时,可能会遇到一些常见的问题。以下是一些问题及其解决方案:1. 滑块值不更新问题描述:当用户拖动滑块时,滑块的值不会实时更新,或者显示的值不正确。解决方案:确保绑定的模型是双向绑定,使用 ngModel 或者监听 input 事件来确保滑块值能实时更新。例如: 确保你已经导入了 FormsMo…

    2024年11月27日
    00
  • 锁策略和优化是并发编程 synchronized 的优化,JVM 与编译器的锁优化

    锁策略和优化是并发编程中的重要话题,特别是在 Java 中,synchronized 作为基本的内置锁机制,得到了多层次的优化。在 JVM 和编译器层面,也有多种优化策略以提升锁的性能。 1. 锁策略:不同场景下的锁机制选择 2. synchronized 的优化 2.1 早期问题 在 Java 1.5 之前,synchronized 的实现依赖重量级锁,直…

    2024年11月24日
    00
  • python反爬-图像验证码与滑块验证码的跳过反selenium检测,动态ip等问题

    针对反爬措施,Python可以使用以下策略来跳过图像验证码与滑块验证码、反检测Selenium,以及通过动态IP规避限制。这是一个分步说明: 1. 图像验证码的跳过与破解1.1 图像验证码处理对于简单的图像验证码,可以使用 OCR 技术直接识别验证码内容。常用库包括:Tesseract-OCR: 一款开源 OCR 工具。Pytesseract: Tesser…

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

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

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

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

    2024年12月2日
    00
  • 在 Ant Design ProTable 中,如何设置不分页,依然显示分页信息,前端分页不触发

    在 Ant Design ProTable 中,默认情况下,分页是与数据请求(request)相关联的。也就是说,每当分页切换时,request 会被触发,重新请求新的数据。如果你希望在禁用分页的同时,依然显示分页控件,并且不触发 request 请求,可以通过以下方法进行配置。解决方案要在 Ant Design ProTable 中禁用分页的同时保留分页信…

    2024年11月29日
    00
  • 用python 通过 OAuth2 获取 Outlook 邮箱收件箱的步骤如下

    通过 OAuth2 获取 Outlook 邮箱收件箱的步骤如下。我们将使用 Microsoft Graph API,它是访问 Microsoft 365 服务(包括 Outlook 邮箱)的推荐方法。 1. 创建 Azure 应用程序 在 Azure 门户中,创建一个应用以获取必要的 OAuth2 凭据。 2. 配置 Python 项目 安装必要库: 必要配…

    2024年11月24日
    00
  • 用 Python 写了一款天天酷跑(游戏)

    用 Python 实现一个像《天天酷跑》这样的游戏可以使用 Pygame 库,它是一个基于 SDL 的跨平台 2D 游戏开发库,功能强大且易于学习。以下是一个简化版的《天天酷跑》游戏实现示例。 代码说明 扩展功能 可以基于此代码添加更多功能: 资源准备 这些资源可以从网上下载或使用自制图片,确保尺寸适合屏幕分辨率。 运行环境 2. 运行代码并确保资源路径正确…

    2024年11月21日
    00
  • HTTP POST/GET 接口测试工具是开发和测试

    HTTP POST/GET 接口测试工具是开发和测试网络应用时必不可少的工具,用于验证 HTTP 请求的正确性、响应的状态和数据格式。以下是常用的 HTTP 接口测试工具及其功能介绍。 1. 常用的 HTTP 接口测试工具 1.1 Postman Postman 是目前最流行的 API 测试工具,适用于 RESTful 和 GraphQL 接口的测试。 功能…

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

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

    2024年11月25日
    00
  • 在 Nuxt.js 应用中,webpack 的 compile 事件钩子构建过程

    在 Nuxt.js 应用中,webpack 的 compile 事件钩子通常用于在构建过程中处理或监听 Webpack 编译的状态。webpack 是 Nuxt.js 中的核心构建工具之一,而 Nuxt.js 本身是基于 Webpack 配置的,允许你通过扩展 Webpack 配置来进行自定义。要使用 webpack 的 compile 事件钩子,首先你需要…

    2024年11月29日
    00
  • PHM技术:一维信号时序全特征分析(统计域/频域/时域)信号处理

    PHM(Prognostics and Health Management,预测与健康管理)技术中的一维信号时序特征分析,旨在从信号中提取与设备健康状态相关的多种特征。以下是针对统计域、频域和时域特征分析的详细介绍和常见方法。 1. 时域特征分析时域特征直接从原始信号提取,描述信号的统计特性或时间行为。这些特征反映信号的幅值、变化趋势和波形形状。1.1 常用…

    2024年11月28日
    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

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信