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

在自动化测试和网页抓取的过程中,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 实例进行自动化操作:

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:
    start_chrome()
    

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


总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477355.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt界面设计时使各控件依据窗口缩放进行栅格布局的方法

图1 最终效果 想要达成上述图片的布局效果,具体操作如下: 新建一窗体: 所需控件如下: Table View控件一个; Group Box控件一个; Push Button控件2个; Horiziontal Spacer控件2个&#xf…

【Git】:Git基本操作

目录 创建、配置本地仓库 创建本地仓库 配置本地仓库 认识工作区、暂存区、版本库 修改文件 版本回退 撤销修改 删除文件 创建、配置本地仓库 创建本地仓库 我们通常可以通过以下两种方式之一获取 Git 存储库: 自己在本地目录创建一个本地仓库 从其它服务…

CANDENCE: 绘制好的封装元件 刷新(Refresh) 和 替换 (Replace)焊盘

绘制好的封装元件 刷新(Refresh) 和 替换 (Replace)焊盘 一、刷新(Refresh) 1、以下面这个bga484封装的元件为例 2、打开bga的焊盘文件 3、我们对上面这个焊盘稍加修改,如下,然后保存 4、在封装编辑页面,如下操作 5…

HarmonyOS:使用ArkWeb构建页面

一、简介 页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中,若涉及网络资源获取,需要配置ohos.permission.INTERNET网络访问权限。 二、…

修改一下达梦disql 提示符

经常用disql的有时某些信息希望提示一下,默认的只显示SQL> 为了方便使用,可以在 glogin.sql 中增加些内容。 vi $DM_HOME/bin/disql_conf/glogin.sql增加以下几行 set time on set lineshow offcol global_name new_value global_name SELECT ins…

跨境出海安全:如何防止PayPal账户被风控?

今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈,我们只是想要安安静静地在网上做个小生意,结果不知道为什么,莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的,今天就来给大家分享分享可能的原…

如何读论文【论文精读·1】

第一遍题目 摘要 结论 方法 实验 是不是适合自己看看自己适不适合这篇文章。(花时最少,做海选) 不需要懂太具体的公式。这一遍阅读之后,你需要再继续思考一下这篇论文的质量以及和自己研究方向的契合程度,决定一下自己…

【模块一】kubernetes容器编排进阶实战之pod生命周期、探针简介、类型及示例

kubernetes pod生命周期、探针简介、类型及示例 kubernetes pod生命周期 pod的生命周期(pod lifecycle),从pod start时候可以配置postStart检测,运行过程中可以配置livenessProbe和 readinessProbe,最后在 stop前可以配置preStop操作 探针简介 探针是由…

医学AI公开课·第一期|Machine LearningTransformers in Med AI

小罗碎碎念 从这周开始,我计划每个周末录一个视频,分享一些医学人工智能领域的进展。 作为第一期视频,我打算介绍一下机器学习和Transformer在医学AI领域中的应用。 为了准备这期视频,总共做了24页PPT(三部分内容&…

[代码随想录Day21打卡] 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇

669. 修剪二叉搜索树 给定一个二叉搜索树root,给定一个范围[low, high],修剪二叉搜索树,使修建后的二叉搜索树的值的范围在[low, high]内。 思想:当前节点的值和给定的范围之间的关系,如果当前节点的值大于high那么就…

apr共享内存

下载: Download - The Apache Portable Runtime Project 编译: 使用cmake-gui生成库: apr-1.lib aprapp-1.lib libapr-1.lib libaprapp-1.lib libapr-1.dll 在Developer PowerShell for VS 2019中: 执行nmake -f Makefile.win来…

借助算力云跑模型

算力平台:FunHPC | 算力简单易用 AI乐趣丛生 该文章只讲述了最基本的使用步骤(因为我也不熟练)。 【注】:进入平台,注册登录账号后,才能租用。学生认证+实名认证会有免费的算力资源&#xff0…

聚水潭与MySQL数据集成案例分享

聚水潭数据集成到MySQL的技术案例分享 在现代数据驱动的业务环境中,如何高效、可靠地实现不同系统之间的数据对接成为企业关注的焦点。本次案例将详细介绍如何通过轻易云数据集成平台,将聚水潭的数据无缝集成到MySQL数据库中,实现从“聚水谭…

C语言中const char *字符进行切割实现

将127.0.0.1以“”“.”来进行切割,实现如下: const char * ip "127.0.0.1";char *test new char[100];strcpy(test, ip);const char *split ".";char *final;final strtok(test, split);while (final){printf("%s\n"…

java基础知识(常用类)

一、包装类(Wrapper) (1)包装类与基本数据的转换 装箱:基本类型->包装类型 拆箱:包装类型->基本类型 java5以后是自动装箱和拆箱的方式,自动装箱底层调用的是valueOf方法,比如Integer.…

【Python系列】字典灵活的数据存储与操作

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

neo4j图数据库community-5.50创建多个数据库————————————————

1.找到neo4J中的conf文件,我的路径是:D:\Program Files\neo4j-community-5.5.0-windows\neo4j-community-5.5.0\conf 这里找自己的安装路径, 2.用管理员模式打开conf文件,右键管理员,记事本或者not 3.选中的一行新建一…

AVL树实现

1. AVL的概念 AVL树是最先发明的⾃平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的 左右⼦树都是AV树,且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树, 通过控制⾼度差去控制平…

jvm发展历程介绍

初始阶段:JDK 1.0 - JDK 1.1 • 经典JVM:这是JVM的早期实现,主要特点是使用解释器(Interpreter)来逐行解释执行Java字节码。这种方式虽然简单直接,但执行效率相对较低。 • JIT编译器(Just-In-T…

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler) 性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策,并确认所做的优化是否产生预期结果。 默认情况下,性能分析器记录并保留游戏的最后 300 帧&a…