前言
关于上次发布的文章《【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那必然是很舒服的,我也是这么想的。
‘
如果说你遇到了问题,并且不是以上这种的问题,那么请直接私信我。