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\chromedriver

from 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 sys

if getattr(sys, 'frozen', False):
    print(sys._MEIPASS+ "./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 “chromedriver.exe;.” .\test.py

方法二:通过修改 .spec

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

注意datas是一个元组的列表,格式为 [(“文件名”, “文件位置”),(“文件名”, “文件位置”)…]

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['test.py'],
    pathex=[],
    binaries=[],
    datas=[('chromedriver.exe','.')],
    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.kler.cn/a/274684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3、java虚拟机-类的生命周期-初始化阶段(与程序员有关)

一 、静态代码块执行顺序和字节码文件中的执行顺序以及什么赋值。 类的生命周期-初始化阶段-被static所修饰的常量才会被赋予值 初始化阶段-代码中静态代码块和静态变量的顺序和字节码中的执行顺序是一致的。 二、4种情况下,类会被初始化。 1、怎样查看类是…

JRTLIS登录

之前一直没做登录一是登录涉及业务,框架还没完成的情况不想涉及业务。二是没想好怎么提供多产品适用的登录界面。 不同产品可能登录的组是不同的,如:医生的科室、护士的病区、检验的工作组、试剂的试剂组、血库的输血科。如果登录要把大家都…

百度交易中台之系统对账篇

作者 | 天空 导读 introduction 百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,赋能业务、提供高效交易生态搭建。目前支持百度体系内多个产品线,主要包括:度小店、小程序、地图打车、文心一言等。本文…

MNN createSession 之创建流水线后端(四)

系列文章目录 MNN createFromBuffer(一) MNN createRuntime(二) MNN createSession 之 Schedule(三) MNN createSession 之创建流水线后端(四) MNN Session::resize 之流水线编码&am…

记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题

1.说明 如果是vue svg显示,请查阅其他标准资料,类似使用svg标签。我这里讲的另外一种情况,链接返回的是svg文件,需要用v-html显示图片。 2.activiti6流程图图片格式 ①png格式。可以查看链接返回,以png开头。 ②前端…

常见传感器的原理 和 常见滤波算法实现

阅读引言: 分析常见的传感器的电路原理、向大家提供一些ADC常见的滤波算法的实现, 介绍声、光、热、电、力、气和磁传感器的大致工作原理。 目录 一、常见传感器工作原理 1.声音传感器-动圈&电容咪头 2.光传感器-光敏电阻 3.热传感器-热电偶 4.电传感器-电…

开源模型应用落地-安全合规篇-模型输出合规性检测(三)

一、前言 为什么我们需要花大力气对用户输入的内容和模型生成的输出进行合规性检测,一方面是严格遵守各项法规要求,具体如下:互联网信息服务深度合成管理规定https://www.gov.cn/zhengce/zhengceku/2022-12/12/content_5731431.htm ​ 其次,受限于模型本身的一些缺陷,…

Bert的一些理解

Bert的一些理解 Masked Language Model (MLM)Next Sentence Prediction (NSP)总结 参考链接1 参考链接2 BERT 模型的训练数据集通常是以预训练任务的形式来构建的,其中包括两个主要任务:Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。…

(简单成功)Mac:命令设置别名

案例:给"ls -l"命令,设置别名通过”ll“快速访问 1、在项目根目录底下查看有无.bash_profile文件,注意这个是个隐藏文件,需要使用ls -a命令查看: 没有.bash_profile新建一个文件, 在最后添加一行…

原生html vue3使用element plus 的树tree上移下移案例源码

上效果 html源码 <!DOCTYPE html> <html lang"en"> <!-- * Name: mallSalesReports.html * Description: * Author Lani * date 2024-02-28 18:32:36 --> <head><meta charset"UTF-8"><meta name"viewport" …

轻松解锁微博视频:基于Perl的下载解决方案

引言 随着微博成为中国最受欢迎的社交平台之一&#xff0c;其内容已经变得丰富多彩&#xff0c;特别是视频内容吸引了大量用户的关注。然而&#xff0c;尽管用户对微博上的视频内容感兴趣&#xff0c;但却面临着无法直接下载这些视频的难题。本文旨在介绍一个基于Perl的解决方…

java算法题每日多道

274. H 指数 题目 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;…

行业模板|DataEase制造行业大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

Angular进阶之八: Angular Animation在项目中的实践经验

使用 Angular 进行项目开发的程序员应该都很熟悉 Angular Animation。这是一个 Angular 原生的动画库&#xff0c;它可以替代或者辅助完成原本需要使用 css 的动画功能。 Angular 在国内的运用是很有限的&#xff0c;可借鉴的文档并不很丰富。尤其对于 Angular 动画模块的应用…

【leetcode热题】二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

微信小程序 canvas层级过高覆盖原生组件

一、背景 微信小程序中使用signature第三方插件完成签名效果&#xff0c;但真机调试时发现canvas层级过高遮挡了按钮 二、具体问题 问题原因&#xff1a;签名后点击按钮无法生效 问题代码&#xff1a; <template><view class"sign_page" v-cloak>&l…

Linux 服务升级:MySQL 主从(半同步复制) 平滑升级

目录 一、实验 1.环境 2.Mysql-shell 检查工具兼容性 3.逻辑备份MySQL数据 4.备份MySQL 数据目录、安装目录、配置文件 5.MySQL 升级 6.master节点 使用systemd管理mysql8 7. slave1 节点升级 8. slave2 节点升级 9.半同步设置 二、问题 1.mysqldump备份报错 2.Inn…

【linux】Debian访问Debian上的共享目录

要在Debian系统上访问共享目录&#xff0c;通常意味着要访问通过网络共享的文件夹&#xff0c;比如通过SMB/CIFS&#xff08;Server Message Block/Common Internet File System&#xff09;协议共享的Windows共享文件夹。以下是访问共享目录的步骤&#xff1a; 1. 安装必要的…

kafka2.x版本配置SSL进行加密和身份验证

背景&#xff1a;找了一圈资料&#xff0c;都是东讲讲西讲讲&#xff0c;最后我还没搞好&#xff0c;最终决定参考官网说明。 官网指导手册地址&#xff1a;Apache Kafka 需要预备的知识&#xff0c;keytool和openssl 关于keytool的参考&#xff1a;keytool的使用-CSDN博客 …

MacOS Xcode 使用LLDB调试Qt的 QString

环境&#xff1a; MacOS&#xff1a; 14.3Xcode&#xff1a; Version 15.0Qt&#xff1a;Qt 6.5.3 前言 Xcode 中显示 预览 QString 特别不方便, 而Qt官方的 lldb 脚本debugger/lldbbridge.py一直加载失败&#xff0c;其他第三方的脚本都 不兼容当前的 环境。所以自己研究写…
最新文章