Selenium不同版本配置自动下载驱动及打包细节

Selenium配置浏览器驱动

  • 自动下载浏览器驱动的方法 selenium4.7.0
  • 自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1
  • 手动设置浏览器驱动路径的方法
  • pyinstaller打包程序时同时打包ChromeDriver
    • chromedriver路径需要sys._MEIPASS的路径进行引用
    • 方法一:通过–add-data命令
    • 方法二:通过修改 .spec

笔者从接触Python自动化开始就经常使用Selenium进行一些浏览器端界面自动化操作,随后发现不同Selenium版本的迭代更新后相同代码在不同版本无法实现自动化下载浏览器驱动(经查Selenium新版自动下载的浏览器驱动访问地址为谷歌地址,而国内网站不支持访问谷歌地址),故有此篇记录自动下载驱动的代码及selenium版本

自动下载浏览器驱动的方法 selenium4.7.0

# selenium版本为4.7.0
# 下载位置:C:\Users\Administrator\.wdm\drivers\chromedriver\from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Selenium"+Keys.RETURN)
input("按回车键退出~")

自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1

# selenium版本为4.11.0 或4.11.1
# 默认下载位置:C:\Users\Administrator\.cache\selenium\chromedriverfrom selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Selenium"+Keys.RETURN)
input("按回车键退出~")

手动设置浏览器驱动路径的方法

浏览器驱动下载地址:[浏览器驱动下载地址]:

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
service = webdriver.ChromeService(executable_path="你的浏览器驱动的路径")
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Selenium"+Keys.RETURN)
input("按回车键退出~")

pyinstaller打包程序时同时打包ChromeDriver

在使用pyinstaller打包程序时,由于手动下载驱动的情况下并不会打包浏览器驱动,所以在打包后的程序复制到别处运行时还需要加上浏览器驱动一起拷贝,所以更建议打包时将手动下载的浏览器驱动一起打包至程序中,使用方法如下:

chromedriver路径需要sys._MEIPASS的路径进行引用

sys._MEIPASS为exe文件运行时生成的临时文件,程序运行结束后即可自动回收清理,不会占用存储

import os
from selenium import webdriver
import sysif getattr(sys, 'frozen', False):print(sys._MEIPASS+ "./test/chromedriver.exe")application_path = sys._MEIPASS+ "你的chromedriver相对路径"
else:application_path = os.path.dirname(os.path.abspath(__file__)) + "你的chromedriver相对路径"
service = webdriver.ChromeService(executable_path=application_path)
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com")
print(driver.page_source)
input("输入。。。")

方法一:通过–add-data命令

在这里插入图片描述

注意:这里chromedriver.exe 末尾添加的.为当前目录,则该exe要放到test.py同一目录下

pyinstaller -F --add-data “./test/chromedriver.exe;./test” .\test.py

方法二:通过修改 .spec

spec文件需要在datas里设置chromedriver.exe的路径

注意datas是一个元组的列表,格式为 [(“源地址”, “目的地址”),(“源地址”, “目的地址”)…]

# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['test.py'],pathex=[],binaries=[],datas=[('./test/chromedriver.exe','./test')],hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='test',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)

随后在终端运行pyinstaller.exe ./test.spec即可自动编译(需注意: .spec是pyinstaller第一次编译后产生的文件,上述操作是对该文件修改后进行的再次编译,如果还没有.spec,可以先执行pyinstaller -F xxx.py 生成)

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

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

相关文章

LiveGBS流媒体平台GB/T28181功能-HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书

LiveGBS功能支持HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 LiveCMS 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、HTTPS测试证书3、验证HTTPS服务4、为什么要…

安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

python5:基于多进程的并发编程、基于协程的并发编程的学习笔记

进程 为什么要使用多进程?——GIL的存在,多线程实际不是并发执行 将任务分为两类:IO密集型(多线程)CPU密集型(多进程) 多进程的基本用法 concurrent.futures.process.ProcessPoolExecutor#进…

Airgorah:一款功能强大的WiFi安全审计工具

关于Airgorah Airgorah是一款功能强大的WiFi安全审计工具,该工具可以轻松发现和识别连接到无线接入点的客户端,并对特定的客户端执行身份验证攻击测试,捕捉WPA握手包,并尝试破解接入点的密码。在该工具的帮助下,广大研…

C语言联合体和枚举

前言 这篇博客就把剩下的两个自定义类型联合体和枚举好好总结一下,让我们好好看看联合体和枚举到底是什么 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1. 联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 相同成员的结构体和联…

分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测

分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测 目录 分类预测 | Matlab实现PSO-KELM粒子群优化算法优化核极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现PSO-KELM粒子群优化算法优化核极限学习机分类预测(完整源…

ideaSSM 高校公寓交流员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 高校公寓交流管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库&…

C语言:自定义类型(结构体)

目录 一、结构的特殊声明二、结构的自引用三、结构体内存对齐1.对齐规则2.为什么存在内存对齐(1)平台原因 (移植原因):(2)性能原因: 3.修改默认对齐数 四、结构体传参五、结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段使用的注意…

硬件工程师入门基础知识(四)多层陶瓷电容应用(三)

多层陶瓷电容应用(三) 1.开关电源输出滤波电容器如何选择和计算?2.线性电源和开关电源对于滤波电容的选择有何区别?3.哪些电路适合三端多层陶瓷电容?4.哪些电路适合金属支架多层陶瓷电容?1.开关电源输出滤波电容器如何选择和计算? 无论任何开关电源拓扑,其输出滤波的目…

乐得瑞科技PD协议芯片:OTG与充电并行,引领数据交互

在科技日新月异的今天,数据交互的方式对于我们的日常生活和工作都起到了至关重要的作用。但在OTG技术诞生之前,这一过程却显得相当繁琐和耗时。想象一下,你需要将数码相机的照片导入到笔记本电脑中,却不得不频繁地拔出内存卡&…

YOLOv5目标检测学习(6):源码解析之:训练部分train.py

文章目录 前言一、导入相关包与配置二、主函数main2.1 checks:检查rank值来判断是否打印参数、检查git仓库、检查包的安装2.2 判断是否恢复上一次模型训练提问:opt.data, opt.cfg, opt.hyp, opt.weights, opt.project各是什么? 2.3 DDP mode&…

基于JavaWeb+BS架构+SpringBoot+Vue+O2O生鲜食品订购小程序系统的设计和实现

基于JavaWebBS架构SpringBootVueO2O生鲜食品订购小程序系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图 文末获取源码 Lun文目录 目 录 摘 要 I Abstract II 1 绪 论 1 1.1课题研究背景及意义 1 1.2研究现状 1 1.3本论文的主要论文结构 3 2系统相关技术…

Qt实现TFTP Server和 TFTP Client(一)

1 概述 TFTP协议是基于UDP的简单文件传输协议,协议双方为Client和Server.Client和Server之间通过5种消息来传输文件,消息前两个字节Code是消息类型,消息内容随消息类型不同而不同。传输模式有三种:octet,netascii和mail,octet为二…

微服务cloud--抱团取暖吗 netflix很多停更了

抱团只会卷,卷卷也挺好的 DDD 高内聚 低耦合 服务间不要有业务交叉 通过接口调用 分解技术实现的复杂性,围绕业务概念构建领域模型;边界划分 业务中台: 数据中台: 技术中台: 核心组件 eureka&#x…

C/C++代码性能优化——编程实践

1. 编程实践 在一些关键的地方,相应的编程技巧能够给性能带来重大提升。 1.1. 参数传递 传递非基本类型时,使用引用或指针,这样可以避免传递过程中发生拷贝。参数根据是否需要返回,相应加上const修饰,代码更安全&am…

FPGA学习_时序分析

文章目录 前言一、组合逻辑与时序逻辑二、建立时间和保持时间三、建立时间和保持时间 前言 心中有电路,下笔自然神!!! 一、组合逻辑与时序逻辑 组合逻辑:没有时钟控制的数字电路,代码里的判断逻辑都是组…

解决淘宝镜像过期问题 ERR! request https://registry.npm.taobao.org

目录 一、问题描述 二、解决方案 2.1、针对于域名更换解决方案 2.2、针对于证书过期解决方案 三、进行测试 一、问题描述 针对于2022年5月31号和2024年1 月 22 日前的前端项目 npm.taobao.org和旧域名于2021年官方公告域名更换事件,已于2022年05月31日零时起…

每日一题 --- 977. 有序数组的平方[力扣][Go]

今天这一题和昨天的知识点是一样的,就是双指针法。 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,1…

STM32 ESP8266模块的曲折探索

这是本文的配套资料,最终工程请参考 新_ESP8266资料\stm32f103成功移植的项目 【免费】stm32f103c8t6esp8266资料资源-CSDN文库 一、等到了ready 产品参数 我使用的是ai-thinker的esp8266-01s,以下为产品规格书 引脚定义: 依据引脚定义&…

专业140+总分410+南京大学851信号与系统考研经验南大电子信息与通信集成,电通,真题,大纲,参考书。

今年分数出来还是有点小激动,专业851信号与系统140(感谢Jenny老师辅导和全程悉心指导,答疑),总分410,梦想的南大离自己越来越近,马上即将复试,心中慌的一p,闲暇之余&…