当前位置: 首页 > news >正文

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言

我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。

前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜*狐搜索爬取新闻结果的数据)记录了应用中使用的爬虫技术。

这篇日志记录另外一个问题的解决。

二、问题描述

我在完成软件的初步开发后,曾将软件打包成exe文件后,拷贝到两位同事的电脑上进行检测,软件可以正常打开,但是在输入关键字,点击搜索按钮后,Edge浏览器却一直没有弹出。之后通过研究和对比,找出了原因。

我安装的selenium 库版本号是4.27.1,这个版本的selenium在执行 webdriver.Edge() 方法时,如果没有指定“msedgedriver.exe”,会自动下载msedgedriver.exe文件并保存到C盘 > 用户 > 用户名(如Administer、Lenovo等) > .cache >selenium >msedgedriver > win64 > 驱动版本号 文件夹下。且下载的msedgedriver文件的版本号能够兼容用户电脑上的Edge浏览器。

(selenium自动下载的msedgedriver.exe)

回忆我学习selenium 库的时候,好像刚开始也出现过隔了好一会才打开Edge浏览器的情况。并且在研究如何解决问题的过程中,我曾打开Edge浏览器检查版本号,发现浏览器在更新,并且在浏览器更新后我在进入pycharm调试我开发的软件时,同样出现了打开Edge浏览器等待时间长的情况,基本可以判断造成长时间不打开Edge浏览器的原因是软件正在下载msedgedriver.exe,由于我公司的内部网络有限速,导致下载时间长。

找到原因后,我一开始尝试的方法是:下载好与使用者电脑Edge浏览器版本号一致的msedgedriver.exe,并copy到使用者电脑C盘的 “.cache” 目录中对应的子文件夹下。再次运行我开发的爬虫软件,这次可以较快速的打开Edge浏览器了。

不过这种手动添加的方法,很不方便,不太可取。首先是,我的同事大多不精通电脑,这个操作对他们来说有难度。而如果都由我一个个的设置,则比较麻烦。其次,我发现我开发的电脑与软件测试的2台电脑中的Edge浏览器版本号都不一样,且我的电脑Edge用得比较多,版本都升级了好几次了, “.cache” 目录内已经下载了好几个版本的msedgedriver.exe了。查询Microsoft Edge Driver官网 可以看到msedgedriver的版本号非常多,在无法确定使用者电脑中Edge浏览器的版本号时,难道要把这些版本的驱动都下载?那也太麻烦了,且占用的存储空间也很大。

在否定了手动添加msedgedriver.exe的方法后,就需要寻找更有效的方法让使用者可以方便的下载和配置msedgedriver.exe了。

三、借助DeepSeek获取解决办法

正好这几天DeepSeek上了热搜,看到相关的文章,让我对DeepSeek产生了兴趣,就尝试了用DeepSeek来解决问题,结果从DeepSeek给的答案中找到了解决问题的方法。

我一共向DeepSeek提了2个问题。

第1问:“使用selenium库,如何获取edge浏览器的版本号”。

这一问的目的是希望通过自己开发的应用获取到Edge浏览器的版本号,为下一步下载对应版本的msedgedriver.exe做准备。DeepSeek思考了64秒,给了我一份详细的答案。在这份答案中给出了“通过driver.capabilities获取浏览器的详细信息”的方法。

这个方法也确实可以获取到Edge浏览器的版本号,不过此法仍需通过webdriver.Edge() 方法打开Edge浏览器,才能获取到浏览器的版本信息(同时还能获取到msedgedriver.exe的版本号信息),但我之前遇到的问题是在使用者的电脑上并没有下载和配置好msedgedriver.exe,导致了打开Edge浏览器需要很长的时间,而我又暂时无法在软件中给出足够有效的提示,因此,这个办法不适合我遇到的问题。

(第1问)

(第1问的答案)

接着我又提出了第2问:“使用python进行爬虫软件开发,如果没有提前下载msedgedriver驱动,在软件中执行webdriver.Edge()方法,无法打开Edge浏览器,如何处理。”

这一问的描述更详尽一些,且是接着上一问提的,DeepSeek这次比较给力,只思考了34秒,最终给了我三个解决方法,从中,我选择了第二个方法。另外两个方法我并未尝试。

(第1问)

(第2问给的第一个方法)

(第2问给的第二个方法)

(第2问给的第三个方法)

四、功能实现

我基于DeepSeek给的方案完善了自己的爬虫软件,在应用中,添加了检查浏览器版本号和msedgedriver.exe的版本号的功能,一旦发现版本号不一致,或信息缺失,就会提示用户下载msedgedriver.exe。软件会将msedgedriver.exe下载到应用工作目录的drivers文件夹下。另外,我在所有调用webdriver.Edge() 方法的代码块,都添加了指定msedgedriver.exe文件路径的语句,使webdriver.Edge() 方法可以直接到指定目录下找到msedgedriver.exe,这样就可以加快Edge浏览器的启动了。解决问题的代码分以下几个部分(具体代码见“五、代码展示”):

1. get_edge_version()方法:

从注册表中获取Edge浏览器的版本号

2.get_edgedriver_version()方法:

获取msedgedriver的版本号

3. download_edgedriver()方法:

下载Edge浏览器对应版本的msedgedriver

4.check_system_bit()方法:

检查操作系统是64位还是32位,根据此方法结果决定下载win64还是win32的msedgedriver

5.vrsion_comparison()方法:

比较浏览器和驱动的版本号

6.open_edge()方法:

用于展示执行webdriver.Edge方法时检查和设置msedgedriver

五、代码展示

最后放上功能实现的示例代码供参考,可以直接运行。

from selenium import webdriver from selenium.webdriver.edge.service import Service import time import re import winreg # Windows系统 用于从注册表中获取信息 import requests import zipfile import os import subprocess # 用于获取驱动器的版本号 def get_edge_version(): """ 从注册表中获取Edge浏览器的版本号 """ try: key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SoftwareMicrosoftEdgeBLBeacon") version, _ = winreg.QueryValueEx(key, "version") winreg.CloseKey(key) return version except Exception: return None def get_edgedriver_version(): """ 获取Edge驱动器版本号 """ # 指定msedgedriver的路径 msedgedriver_path = os.path.abspath("drivers/msedgedriver.exe") try: # 尝试获取版本信息 ver = subprocess.run([msedgedriver_path, '--version'], capture_output=True, text=True) if ver.returncode == 0: # 形如:Microsoft Edge WebDriver 120.0.2210.91 (f469d579f138ffc82b54354de66117c1cb1bb923) match = re.search(r'(d+.d+.d+.d+)', ver.stdout.strip()) if match: vrsion = match.group(1) return vrsion else: return None else: print("获取版本时出错:", ver.stderr.strip()) return None except Exception as e: print("出现错误:", str(e)) return None def download_edgedriver(version: str): """ 下载对应版本的msedgedriver """ # 检查操作系统位数 architecture = check_system_bit() if architecture == 64: # 下载win64位的压缩包 url = f'https://msedgedriver.azureedge.net/{version}/edgedriver_win64.zip' else: # 下载win32位的压缩包 url = f'https://msedgedriver.azureedge.net/{version}/edgedriver_win32.zip' print('驱动器压缩包下载地址:') print(url) response = requests.get(url) print('开始获取驱动器压缩包') # 保存并解压驱动 zip_path = f"edgedriver_win{architecture}.zip" with open(zip_path, 'wb') as f: f.write(response.content) print(f'驱动器压缩包已下载到当前工作目录内,文件名{zip_path}') with zipfile.ZipFile(zip_path, 'r') as zip_ref: zip_ref.extractall("drivers/") os.remove(zip_path) print('文件已解压,压缩包已删除') return os.path.abspath("drivers/msedgedriver.exe") def check_system_bit(): """ 检查操作系统位数 """ if 'PROGRAMFILES(X86)' in os.environ: print("你的电脑为 64-bit 操作系统") return 64 else: print("你的电脑为 32-bit 操作系统") return 32 def vrsion_comparison(edge_v: str, driver_v: str): """ 比较浏览器和驱动的版本号 """ if edge_v == driver_v: return True else: return False def open_edge(url): """ 用于展示执行webdriver.Edge方法时检查和设置msedgedriver """ # 获取浏览器版本 edge_version = get_edge_version() # 获取驱动器版本,同时也是检查驱动器是否存在 driver_version = get_edgedriver_version() if edge_version and driver_version: math = vrsion_comparison(edge_version, driver_version) if not math: print('浏览器和驱动器版本号不一致,但我们仍尝试打开浏览器') try: # 指定msedgedriver.exe的完整路径 path_to_executable = os.path.abspath("drivers/msedgedriver.exe") service = Service(executable_path=path_to_executable) driver = webdriver.Edge(service=service) driver.get(url) # 等待页面加载完成 time.sleep(30) except Exception as e: print(f'打开驱动器出错:{e}') else: print('浏览器或驱动器版本信息缺失,可能导致异常,故暂不能执行爬虫任务。') if __name__ == '__main__': # 1.获取edge浏览器版本号 edge_version = get_edge_version() print("Edge浏览器版本号:", edge_version) # 2.获取驱动器版本 driver_version = get_edgedriver_version() print("msedgedriver版本号:", driver_version) # 3.进行版本信息检查 check_ok = False if driver_version: if edge_version: # 比较浏览器和驱动器的版本号 result = vrsion_comparison(edge_version, driver_version) if result: print('浏览器和驱动的版本一致') check_ok = True else: print(f'浏览器版本{edge_version} 和 驱动器版本{driver_version} 不一致') select = input('是否下载浏览器对应版本的驱动?(Y/N)?').strip() select = select.lower() if select == 'y': # 4.下载驱动器 print('开始下载浏览器驱动,请稍候') driver_path = download_edgedriver(edge_version) print(f'驱动已下载,保存在 {driver_path}') check_ok = True else: print('您未下载浏览器对应版本的驱动,可能会导致在软件中打开Edge浏览器出问题') else: print('未获取到Edge浏览器的版本信息') else: print('未获取到驱动版本信息') select = input('是否下载浏览器对应版本的驱动?(Y/N)?').strip() select = select.lower() if select == 'y': # 4.下载驱动器 print('开始下载浏览器驱动,请稍候') driver_path = download_edgedriver(edge_version) print(f'驱动已下载,保存在 {driver_path}') check_ok = True else: print('您未下载浏览器对应版本的驱动,可能会导致在软件中打开Edge浏览器出问题') # 4. 打开浏览器 if check_ok: m_url = 'https://www.baidu.com/' open_edge(m_url)
http://www.jsqmd.com/news/469904/

相关文章:

  • 若依微服务中配置 MySQL + DM 多数据源
  • 解决MySQL8.0报错Client does not support authentication protocol requested by server...问题
  • 2026年烟囱塔优质产品推荐榜:监控铁塔/瞭望监控塔/碳钢烟囱塔/角钢监控塔/道路监控塔/钢管监控塔/镀锌监控塔架/选择指南 - 优质品牌商家
  • 2026优秀可靠门窗品牌推荐:四川门窗品牌/性价比门窗/成都门窗/推拉窗/推拉门/系统门窗/节能门窗/铝合金门窗/选择指南 - 优质品牌商家
  • 2026年评价高的超低温试验箱厂家推荐:高精度-70℃~-180℃超低温试验箱源头厂家推荐 - 品牌宣传支持者
  • 这个 PUA Skill 火了:用阿里/字节的绩效话术逼 Claude 不敢放弃,一言不合打 3.25
  • 解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
  • 2026模块化移动售楼处优质服务商推荐榜:临时售楼处、临时样板间、创意集装箱售楼处、可定制的售楼处、可拆卸售楼处选择指南 - 优质品牌商家
  • 2026年初至今,吉林地区值得信赖的路边石供应商精选 - 2026年企业推荐榜
  • 工业运动控制可靠伦茨伺服品牌推荐指南:科尔摩根电机、科尔摩根直线电机、科尔摩根维修、科尔摩根驱动器、伦茨PLC选择指南 - 优质品牌商家
  • 第二章 Spring中的Bean
  • 聚焦3c电子精密抓取需求,精选2026年高可靠3c电子电爪品牌 - 品牌2026
  • 机器人灵巧手技术与应用场景:助力挑选专业灵巧手品牌 - 品牌2026
  • 为什么RTL总是姗姗来迟?
  • 2026年个性化定制防盗盖供应商推荐指南:试管瓶、进样瓶、避光瓶、酒瓶盖、铝塑盖、铝盖、食品级玻璃瓶、儿童安全盖选择指南 - 优质品牌商家
  • 解决JDK25,IDEA控制台中文乱码问题
  • 如何在 Golang 项目中高效运用 Protocol Buffers
  • 2026可靠直流充电桩优质产品推荐榜:电动汽车充电桩、重卡充电桩、高功率充电桩、3C国标充电桩、V2G充电桩、快充充电桩选择指南 - 优质品牌商家
  • 2026年出国劳务优质服务推荐榜正规资质权益保障:出国劳务哪里工资高、劳务输出公司出国务工、劳务输出出国务工、正规出国务工机构选择指南 - 优质品牌商家
  • 2026政企办公优质会议电子门牌推荐榜:人员去向电子牌、塑胶电子门牌、学校兑换柜、学生积分兑换柜、安全积分兑换柜选择指南 - 优质品牌商家
  • NGA-BBS-Script:论坛界面优化与浏览效率提升工具——如何通过轻量级配置实现信息获取效率翻倍?
  • 电爪核心技术与选型要点——助力高效优质电爪品牌推荐 - 品牌2026
  • 全面了解电爪厂商实力与产品特点,精准对接靠谱电爪生产厂家 - 品牌2026
  • FireRedASR-AED-L在VMware虚拟机中的部署与测试
  • 2026年音圈线性执行器品牌推荐,详解原理与优势 - 品牌2026
  • GoldHEN_Cheat_Manager:重新定义PS4游戏体验的终极优化工具
  • 《认知几何学丛书》(附录:前言·后记·索引)
  • 2026皖江双T混凝土板优质品牌推荐榜:双t预制板、屋面双t板、混凝土马鞍板、钢筋混凝土双t板、预应力混凝土双t板选择指南 - 优质品牌商家
  • 2026兰州防火涂料优质推荐榜环保低VOC之选:兰州防火涂料、丙烯酸脂肪族聚氨酯面漆、丙烯酸防锈漆、室内超薄型钢结构防火涂料选择指南 - 优质品牌商家
  • 《认知几何丛书》第七卷:认知宇宙学与元理论