【selenium】selenium4新版本自动获取驱动的常见问题

简介: 【selenium】selenium4新版本自动获取驱动的常见问题



前言

关于上次发布的文章《【Python爬虫 • selenium】selenium4新版本使用指南》很多人反馈说自动获取的驱动会导致闪退,本次文章给出详细配置。

首先说一下大家闪退的问题。我在低版本的python中,安装selenium,发现安装的是旧版本,并不是selenium4的版本,就导致用法还是selenium3,此时用我之前提供的selenium4的代码必然会报错,因此在本次文章中将会给出各种驱动的selenium3和selenium4版本的代码,供大家直接cv。

其次,本次文章还要让大家学会如何排错。selenium闪退原因其实很好排查的,一般来说,运行报错就会有提示,这些东西在正文中将会说明。


一、安装驱动

当前环境配置,python=3.10,

注意,确保你的python版本是高版本,低版本会自动安装selenium3,高版本会自动安装selenium4,如果你不明白你安装的selenium版本是多少,建议你使用pip list命令来查看一下

我是用的python3.10安装了默认是4.7版本的selenium。

pip install webdriver-manager

然后安装selenium

pip install selenium

二、使用步骤

本次以Edge为例,因为我目前只有Edge是空闲的。

1.导入包

代码如下:

from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

2.生成驱动

代码如下:

driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))

3.打开网站

我这里以打开我的博客为例,注意这里要做延时,否则闪退。

driver.get('https://blog.csdn.net/weixin_47754149?spm=1010.2135.3001.5343')
sleep(10000)

运行效果图如下

运行10秒后会自动关闭,说明确实是没有问题的。

二、selenium闪退问题处理

selenium闪退正常情况下是有两种问题导致的,一是selenium和你的代码版本不兼容,或者说你代码写错了,二是浏览器闪了一下就没了,这种情况不是你代码写错了,而是浏览器打开的时候代码执行完了。你只需要做一点适当的延迟即可。因此这里展开对第一种情况进行处理。

1. selenium版本与代码不匹配

这部分是最有可能遇到的错误。通常来说,你安装selenium的时候会自动识别你的python版本进行安装对应的版本,比如你用的python3.6,就会默认安装selenium3,如果你用的python3.10就会自动安装selenium4,因此确定你安装的selenium是哪个版本是非常重要的。

首先要确认你的selenium版本,使用以下命令

pip list

然后就会输出你当前环境中的包和版本号

其中需要找你的selenium,查看是哪个版本的

然后根据你对应版本号来看你应该写selenium3还是selenium4的代码,这样就不闪退了。

2. selenium代码异常

这部分闪退问题基本上就说明了你代码功底不够扎实,这种问题属于语法错误,因为python是边解释边执行的,代码正确的会执行,错误代码及以后就不执行了,而且一些没有的字段和属性在开发中不会标注出来,所以新手是不好看出来的。

这种问题我的建议是使用IDE来进行开发,我推荐使用visual studio code,然后安装python插件,在状态栏那里选择你的python版本

此时代码就会有提示了,如果你写的代码有问题就会在这里显示出来

有点开发经验的就直接加个异常处理就好了,就不细说了。

三、代码示例

此处代码专供cv使用,让你在cv的时候更爽,更直接。

1.selenium4代码示例

1. Chrome

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

2. Chromium

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromiumService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType
driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()))

3. Brave

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as BraveService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType
driver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()))

4. Firefox

# selenium 4
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))

5. IE

# selenium 4
from selenium import webdriver
from selenium.webdriver.ie.service import Service as IEService
from webdriver_manager.microsoft import IEDriverManager
driver = webdriver.Ie(service=IEService(IEDriverManager().install()))

6. Edge

# selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))

7. Opera

# selenium 3 & 4
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager
driver = webdriver.Opera(executable_path=OperaDriverManager().install())

2.selenium3代码示例

1. Chrome

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

2. Chromium

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType
driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())

3. Brave

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType
driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install())

4. Firefox

# selenium 3
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())

5. IE

# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import IEDriverManager
driver = webdriver.Ie(IEDriverManager().install())

6. Edge

# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(EdgeChromiumDriverManager().install())

7. Opera

# selenium 3 & 4
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager
driver = webdriver.Opera(executable_path=OperaDriverManager().install())

3. 提供的操作框架

import os
import requests
from requests import Response
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.download_manager import WDMDownloadManager
from webdriver_manager.core.http import HttpClient
from webdriver_manager.core.logger import log
class CustomHttpClient(HttpClient):
    def get(self, url, params=None, **kwargs) -> Response:
        """
        在这里添加你的操作,session,代理等
        """
        log("这些将会被自定义的http客户端调用")
        return requests.get(url, params, **kwargs)
def test_can_get_chrome_driver_with_custom_http_client():
    http_client = CustomHttpClient()
    download_manager = WDMDownloadManager(http_client)
    path = ChromeDriverManager(download_manager=download_manager).install()
    assert os.path.exists(path)

总结

以上就是本期文章的所有内容了,主要是处理大家在使用自动获取驱动的时候遇到的问题,尽管问题总结不是很全面,但是已经触及到根本的方面了,那就是selenium和python版本一定要匹配才能安装selenium4。其次就是将一些selenium的代码贴出来便于大家直接cv,我相信这是很有用的,当你看到这篇文章发现可以直接cv那必然是很舒服的,我也是这么想的。

如果说你遇到了问题,并且不是以上这种的问题,那么请直接私信我。

目录
相关文章
|
Web App开发 Windows
Selenium Chrome浏览器版本与chromedriver驱动兼容版本对照表
Selenium Chrome浏览器版本与chromedriver驱动兼容版本对照表
1671 0
Selenium Chrome浏览器版本与chromedriver驱动兼容版本对照表
|
Web App开发
selenium之 chromedriver与chrome版本映射表(更新至v2.43)
selenium之 chromedriver与chrome版本映射表(更新至v2.43)
955 0
|
Web App开发 缓存 文字识别
scrapy_selenium的常见问题和解决方案
scrapy_selenium是一个结合了scrapy和selenium的库,可以让我们使用selenium的webdriver来控制浏览器进行动态网页的爬取。但是在使用scrapy_selenium的过程中,我们可能会遇到一些问题,比如如何设置代理、如何处理反爬、如何优化性能等。本文将介绍一些scrapy_selenium的常见问题和解决方案,希望对你有所帮助。
275 0
scrapy_selenium的常见问题和解决方案
|
6月前
|
Web App开发 前端开发 程序员
【 selenium】selenium4新版本使用指南
【 selenium】selenium4新版本使用指南
1227 1
|
6月前
|
Web App开发 Python Windows
Python Selenium 驱动下载与配置使用(详细流程)
Python Selenium 驱动下载与配置使用(详细流程)
587 0
|
Python
wallhaven壁纸下载-selenium版本
wallhaven壁纸下载-selenium版本
112 0
|
关系型数据库 MySQL 测试技术
selenium-基于unittest的yaml数据驱动
selenium-基于unittest的yaml数据驱动
129 0
|
Web App开发 Python Windows
Python Selenium 驱动下载与配置使用(详细流程)
Python Selenium 驱动下载与配置使用(详细流程)
1115 0
|
Web App开发
Selenium自动化chrome驱动版本匹配但是调用浏览器失败:Only local connections are allowed. 问题解决
Selenium自动化chrome驱动版本匹配但是调用浏览器失败:Only local connections are allowed. 问题解决
434 0
|
Web App开发 Python
Selenium成长之路-04浏览器以及驱动的安装
Selenium成长之路-04浏览器以及驱动的安装
175 0
Selenium成长之路-04浏览器以及驱动的安装

热门文章

最新文章