自动化管理chromedriver-完美解决版本不匹配问题

10 篇文章 1 订阅

Python Selenium自动化 - 自动管理chromedriver

  • 之前我们介绍了如何使用Python Selenium做浏览器自动化测试,提供的详细示例已经很好地介绍了如何使用ChromeDriverManager来自动管理ChromeDriver。
    如何使用ChromeDriverManager 来管理ChromeDriver
  • 最近chrome自动更新了116版本,chromedriver仍停留在114版本,上文代码会在当前目录自动下载最新114版本chromedriver,只有当二者同步更新时可以正常使用。

解决方案:锁定旧版Chrome

Chrome自动更新迅速,较新的旧版Chrome难以寻找,一种简单的方法是锁定Chrome浏览器在较旧的版本,例如104。
你可以在这里找到安装包
Google Chrome Older Versions Download (Windows, Linux &Mac)
下载安装会下载到这个目录 C:\Program Files (x86)\Google
锁定方法可参考这篇文章
彻底关闭Chrome浏览器自动更新

然后我们使用chromedriver_autoinstaller模块,它可以自动检查当前Chrome浏览器版本,并下载匹配的最新chromedriver。
使用步骤:

  1. 安装chromedriver_autoinstaller
   pip install chromedriver_autoinstaller
  1. 导入模块并调用install方法安装匹配chromedriver
 import chromedriver_autoinstaller
 chromedriver_autoinstaller.install()
  1. 创建ChromeDriver实例
driver = webdriver.Chrome()

完整代码及实例

这个版本的chromedriver会下载到C盘中的这个目录

C:\Users\你的用户名\.cache\selenium\chromedriver\win32\104.0.5112.79
import time

import chromedriver_autoinstaller
from selenium.webdriver.common.by import By
from selenium import webdriver

# 自动安装匹配版本的 Chromedriver,首次下载时间较长,
# 首次下载后使用时注释掉,否则会重复下载
chromedriver_autoinstaller.install()

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 使用浏览器访问网页
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("selenium")
driver.find_element(By.ID, "su").click()
time.sleep(2)
driver.quit()

以上代码第二次使用时需要通过注释避免重复下载,不够完善。
优化后代码

import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import os
import chromedriver_autoinstaller

# 获取当前文件所在目录的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 设置驱动下载目录为当前目录下的drivers文件夹
driver_path = os.path.join(current_dir, 'drivers')
os.makedirs(driver_path, exist_ok=True)

# 提示用户选择是否下载新的 Chromedriver
user_choice = input("是否更新 Chromedriver?(y/n): ")
if user_choice.lower() == 'y':
    # 自动安装最新版本的 Chromedriver
    chromedriver_autoinstaller.install(path=driver_path)

    # 创建Service对象,传入chromedriver路径
    chromedriver_path = os.path.join(driver_path, chromedriver_autoinstaller.get_chrome_version())
    service = Service(chromedriver_path)

    # 创建一个 Chrome 浏览器实例,传入驱动服务对象
    driver = webdriver.Chrome(service=service)
else:
    # 如果你不使用104版本的chrome,需要改成你之前下载好的路径,跳过下载
    service = Service("drivers/104/chromedriver.exe")
    driver = webdriver.Chrome(service=service)

# 使用浏览器访问网页
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("selenium")
driver.find_element(By.ID, "su").click()
time.sleep(2)

# 关闭浏览器
driver.quit()

现在chromedriver的版本将永远和Chrome浏览器版本相匹配,避免了版本不兼容的问题。

总结

chromedriver_autoinstaller可以自动管理chromedriver版本,是Python Selenium测试者的必备工具。它可以提高代码可移植性,减少版本问题导致的失败。推荐结合使用,使得自动化测试更加稳定可靠。

实践:爬虫数据清洗可视化实战-就业形势分析

2023-11-14

国内使用chromedriver_autoinstaller网络受限,你可以在这里下载我下载好的chromedriver
链接:https://pan.baidu.com/s/1GnJTPO-4JPB_j2wrYZZJ8A?pwd=97jn
提取码:97jn
然后使用

    service = Service("drivers/104/chromedriver.exe")

实践Scrapy+Selenium自动化获取个人CSDN文章质量分

import csv
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

option = Options()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
option.add_argument('--headless')  # 启用无头模式
service = Service("drivers/104/chromedriver.exe")

driver = webdriver.Chrome(options=option,service=service)

# 用于存储CSV数据的列表
data = []
#
# 打开CSV文件并读取内容
with open('data.csv','r', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        # 每行包括两个字段:链接和标题
        link, title = row
        # 将链接和标题作为元组添加到数据列表中
        data.append((link, title))

# 使用浏览器访问网页
driver.get("https://www.csdn.net/qc")
for link,title in data:
    driver.find_element(By.CSS_SELECTOR, ".el-input__inner").send_keys(f"{link}",link)
    driver.find_element(By.CSS_SELECTOR, ".trends-input-box-btn").click()
    time.sleep(0.5)
    soc = driver.find_element(By.XPATH, '//*[@id="floor-csdn-index_850"]/div/div[1]/div/div[2]/p[1]').text
    print(title,soc)
    time.sleep(1)
driver.quit()

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
chromedriverchrome浏览器版本不匹配是指您正在使用的chromedriver版本与您的chrome浏览器的版本不兼容。这可能会导致运行问题或报错。解决这个问题的方法是确保您下载了适用于您当前chrome浏览器版本的正确版本chromedriver。您可以通过以下步骤来解决这个问题: 1. 首先,查看您的chrome浏览器的版本。您可以在chrome浏览器的菜单中选择"帮助",然后点击"关于Google Chrome"来查看版本号。 2. 接下来,访问chromedriver的下载页面 。根据您的chrome浏览器版本,下载与之匹配的chromedriver版本。 3. 下载完chromedriver,将其解压缩到一个易于访问的位置。 4. 在您的代码中,指定使用您刚刚下载的chromedriver的路径。这样,当您运行脚本时,它将使用正确的版本chromedriver与您的chrome浏览器进行通信。 通过确保chromedriverchrome浏览器版本匹配,您应该能够解决chromedriverchrome浏览器版本不匹配问题。这样,您的脚本应该可以顺利运行了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [seleniumchrome浏览器与chromedriver不匹配问题](https://blog.csdn.net/LiquorE/article/details/130124040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [chrome浏览器版本Chromedriver不匹配问题解决办法selenium.common.exceptions.SessionNotCreated...](https://blog.csdn.net/superdangbo/article/details/127148572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [chromedriverchrome版本不匹配导致无法运行selenium解决办法](https://download.csdn.net/download/weixin_38589314/14035584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friklogff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值