python爬虫报错:This version of ChromeDriver only supports Chrome version 114

使用selenium爬取网页数据,一运行程序就报错:

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114

Current browser version is 117.0.5938.149 with binary path C:\Program Files\Google\Chrome\Application\chrome.exe

就很奇怪,之前都是没问题的,今天就不行了,查了网上的资料说是浏览器升级了,跟selenium的浏览器驱动不一致造成的,解决办法就是:

1)换浏览器版本;

2)换浏览器驱动版本;

第一种感觉不靠谱,后面浏览器自动升级了还得出现这个问题;所以就用第二种,参考网上的说法,去CNPM Binaries Mirror这里下载浏览器对应的驱动,可是我的浏览器是117版本的,这里面根本找不到

要正确解决这个问题,一个好方法是使用WebDriverManager库。它是一个开源的Java库,以完全自动化的方式执行Selenium WebDriver所需的驱动程序的管理(即下载、设置和维护)。其最新版本提供了其他相关功能,如发现本地系统中安装的浏览器的能力,无缝运行Docker容器中的浏览器,以及监控能力,废话不多说,直接上代码。

1、添加maven依赖

在java项目中添加如下依赖(我的是springboot项目):

XML 复制代码
        <dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.github.bonigarcia</groupId>
			<artifactId>webdrivermanager</artifactId>
			<version>5.5.3</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents.client5</groupId>
			<artifactId>httpclient5</artifactId>
			<version>5.2.1</version>
			<scope>test</scope>
		</dependency>

2、使用

新建一个WebDriverManagerTests测试类

XML 复制代码
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

/**
 * @description:
 * @author: ndf
 * @create: 2023-10-30 11:29
 **/
public class WebDriverManagerTests {

    static WebDriver browser;

    @BeforeAll
    static void setup() {

        WebDriverManager.chromedriver().setup();

        ChromeOptions options = new ChromeOptions();
        options.setHeadless(false);
        options.addArguments("start-maximized"); // open Browser in maximized mode
        options.addArguments("disable-infobars"); // disabling infobars
        options.addArguments("--disable-extensions"); // disabling extensions
        options.addArguments("--disable-gpu"); // applicable to Windows os only
        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
        options.addArguments("--no-sandbox"); // Bypass OS security model
        options.addArguments("--disable-in-process-stack-traces");
        options.addArguments("--disable-logging");
        options.addArguments("--log-level=3");
        options.addArguments("--remote-allow-origins=*");

        browser = new ChromeDriver(options);
    }

    @Test
    @DisplayName("The google.com web site should have the correct title")
    void testProjectWebSiteShouldHaveCorrectTitle() {
        browser.get("https://google.com/");
        Assertions.assertEquals("Google", browser.getTitle());
    }
}

执行上面代码后,setup()方法会尝试查找机器上安装的浏览器版本。然后,使用浏览器版本,它试图通过各种方法找到合适的驱动程序版本。一旦发现驱动程序版本,WebDriverManager会将驱动程序下载到本地缓存(位于~/.cache/selenium/)。在控制台也可看到打印日志:

类似地,我们可以使用以下语句之一来设置Firefox、Edge、Opera、Chromium和Internet Explorer的驱动程序,如下所示 :

java 复制代码
WebDriverManager.firefoxdriver().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.operadriver().setup();
WebDriverManager.chromiumdriver().setup()
WebDriverManager.iedriver().setup();

3、修改驱动路径

修改Python代码,添加executable_path参数,指定浏览器驱动路径

python 复制代码
browser = webdriver.Chrome(executable_path=r'C:\Users\Administrator\.cache\selenium\chromedriver\win64\117.0.5938.149\chromedriver.exe',options=chrome_options)

运行程序,OK,大功告成!

注意: 在第2步中,运行java代码下载浏览器驱动这里,可能要爬梯到外网,反正我是开了vpn的!!!

相关推荐
benchmark_cc25 分钟前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读37 分钟前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放1 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下1 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐2 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹2 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi
cpolar技术支持2 小时前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
小嘉丶学长2 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
迪菲赫尔曼2 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
用户8356290780512 小时前
Python 调整 Excel 工作表显示设置
后端·python