利用 Python 和 Selenium 高效启动和管理 Chrome 浏览器

ops/2024/11/24 22:05:10/

在自动化测试和网页抓取的过程中,Selenium 是最常用的工具之一。其强大的功能可以与浏览器无缝集成,实现复杂的操作。然而,为了提高效率和扩展性,尤其在处理大量任务时,我们可以通过定制化的方法启动 Chrome 浏览器并与 Selenium 驱动连接。本文将详细解析两段关键代码,实现以下目标:

  1. 使用批处理(.bat)文件启动 Chrome 浏览器。
  2. 利用 Selenium WebDriver 动态连接已启动的浏览器实例。

优势:启动浏览器后可以随时获取driver,同样也可以随时driver.quit()进行其他操作后再获取driver


代码实现

1. 使用批处理启动 Chrome

Chrome 提供了丰富的启动参数供开发者自定义浏览器行为。下面的函数通过生成 .bat 文件,以指定参数启动 Chrome:

def start_chrome():"""通过bat的形式启动chrome浏览器"""script = f"""
@echo off
start "" "{config.chrome_path}" --ignore-certificate-errors --remote-debugging-port=9528 --user-data-dir="C:\selenium\ChromeProfile" --download-default-directory="{config.tmp_dir}" --incognito --start-maximized"""bat_path = pathlib.Path(config.tmp_dir, 'start_chrome.bat')bat_path.open('w').write(script)shell = wincl.Dispatch("WScript.Shell")shell.Run(str(bat_path), 1, True)time.sleep(3)

代码解析

  1. 批处理文件的生成

    • 利用 Python 的 pathlib 模块,动态生成批处理文件 start_chrome.bat
    • 文件内容包括多个 Chrome 的启动参数:
      • --ignore-certificate-errors:忽略 SSL 证书错误,适用于测试环境。
      • --remote-debugging-port=9528:开启调试模式,指定调试端口。
      • --user-data-dir="C:\selenium\ChromeProfile":定义浏览器用户数据目录,用于隔离会话。
      • --download-default-directory:指定文件下载路径。
      • --incognito:开启无痕模式,避免缓存和 Cookie 干扰。
      • --start-maximized:窗口启动即最大化。
  2. 执行批处理文件

    • 借助 Windows 脚本宿主(WScript.Shell)启动批处理文件,避免阻塞主线程。
    • 使用 time.sleep(3) 确保浏览器完全启动。

2. 利用 Selenium WebDriver 连接已启动的 Chrome

启动浏览器后,通过以下代码,连接到已打开的 Chrome 实例进行自动化操作:

python">def get_driver(executable_path="chromedriver"):"""获取web driver"""options = webdriver.ChromeOptions()options.debugger_address = "127.0.0.1:9528"  # 指定调试端口options.add_argument('--ignore-certificate-errors')driver = webdriver.Chrome(options=options, executable_path=executable_path)driver.implicitly_wait(10)  # 设置隐式等待return driver

代码解析

  1. 调试模式连接

    • 使用 options.debugger_address 配置 WebDriver,通过 127.0.0.1:9528 的调试端口连接到已经启动的 Chrome 浏览器。
  2. 忽略证书错误

    • 再次添加 --ignore-certificate-errors 参数,确保与浏览器配置一致,避免潜在冲突。
  3. 隐式等待

    • 设置 driver.implicitly_wait(10),让 WebDriver 在查找元素时最多等待 10 秒,提升稳定性。

两者结合的优势

  1. 快速启动与复用

    • 通过批处理文件启动的 Chrome,可以在多次测试中复用,减少浏览器多次启动带来的资源消耗。
  2. 调试友好

    • 启用 --remote-debugging-port 后,开发者可以通过 Chrome DevTools 直接查看调试信息。
  3. 个性化配置

    • --user-data-dir 允许隔离用户数据,模拟不同用户的浏览行为。
    • 自定义下载路径,方便批量处理文件。

使用示例

完整流程如下:

  1. 启动 Chrome:
    python">start_chrome()
    

  2. 获取 WebDriver 并操作浏览器:
    python">driver = get_driver()
    driver.get("https://www.example.com")
    print(driver.title)
    


总结

通过上述方法,我们实现了批处理文件与 Selenium WebDriver 的无缝对接。这种方式特别适用于高效处理自动化测试任务,同时支持灵活的浏览器配置。如果你在实际使用中需要进一步优化,可以根据具体需求调整启动参数,比如添加代理、禁用图片加载等。

这不仅是自动化测试中的一项技巧,也是一种提升开发效率的思路。希望这篇文章能为你的 Selenium 使用提供新的启发!


http://www.ppmy.cn/ops/136413.html

相关文章

从0开始分享一个React项目:React-ant-admin

​ 项目源码:https://gitee.com/kong_yiji_and_lavmi/react-ant-admin 项目介绍网站:https://z3web.cn/doc-react-ant-admin/guide/start.html 建议学完React基本知识后,此项目巩固和了解基本知识在项目中如何使用,以及项目架构。 在此基础上…

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署,请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项:后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…

OAI-5G开源通信平台实践(三)

端到端验证相关问题及分析解决 PlmnTACSlice配置UE imsi配置opc/key配置问题5GC侧配置如下:错误现象解决PlmnTACSlice配置 #1. UERANSIM接5GS##AMF报错 02/21 18:05:18.949: [amf] INFO: gNB-N2 accepted[127.0.0.1] in master_sm module (../src/amf/amf-sm.c:741) 02/21 18…

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

一、单选题 1、下面代码运行后出现的图像是?( ) import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案:A 答案…

Java 创建不可变集合

Java中为了安全起见,有时候不想让别人改集合中的数据,那么就可以使用不可变集合。 package listExercise;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** 不可变集合* 长度不变,内容无法修改的集合* 当集合中的…

QSqlTableModel setModel 和 独立设置信号槽冲突

经测试,QSqlTableModel如果预先设置了和 sqlmodel->setTable(tableName); sqlmodel->select(); tableView->setModel(&sqlmodel);再对QSqlTableModel使用信号槽链接,会导致submitAll()提交成功但是数据库实际上没更新的情况。 connect(te…

vue3(十八)-基础入门之vue-nuxt自定义视图及页面组件的特殊配置

一、自定义视图 在没有指定视图的情况下&#xff0c;nuxt 使用的是默认视图 layouts/default.vue <template><nuxt /> </template>1、创建一个视图并将其保存到 layouts/blog.vue 别忘了在布局文件中添加 < nuxt /> 组件用于显示页面的主体内容。 …

输入/输出管理 III(磁盘和固态硬盘)

一、磁盘 【总结】&#xff1a; 磁盘&#xff08;Disk&#xff09;是由表面涂有磁性物质的物理盘片&#xff0c;通过一个称为磁头的导体线圈从磁盘存取数据。在读&#xff0f;写操作期间&#xff0c;磁头固定&#xff0c;磁盘在下面高速旋转。如下图所示&#xff1a; 磁盘盘面…