关于上次发布的文章《【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是空闲的。
代码如下:
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()))
我这里以打开我的博客为例,注意这里要做延时,否则闪退。
driver.get('https://blog.csdn.net/weixin_47754149?spm=1010.2135.3001.5343')
sleep(10000)
运行效果图如下
selenium闪退正常情况下是有两种问题导致的,一是selenium和你的代码版本不兼容,或者说你代码写错了,二是浏览器闪了一下就没了,这种情况不是你代码写错了,而是浏览器打开的时候代码执行完了。你只需要做一点适当的延迟即可。因此这里展开对第一种情况进行处理。
这部分是最有可能遇到的错误。通常来说,你安装selenium的时候会自动识别你的python版本进行安装对应的版本,比如你用的python3.6,就会默认安装selenium3,如果你用的python3.10就会自动安装selenium4,因此确定你安装的selenium是哪个版本是非常重要的。
首先要确认你的selenium版本,使用以下命令
pip list
然后就会输出你当前环境中的包和版本号
其中需要找你的selenium,查看是哪个版本的
然后根据你对应版本号来看你应该写selenium3还是selenium4的代码,这样就不闪退了。
这部分闪退问题基本上就说明了你代码功底不够扎实,这种问题属于语法错误,因为python是边解释边执行的,代码正确的会执行,错误代码及以后就不执行了,而且一些没有的字段和属性在开发中不会标注出来,所以新手是不好看出来的。
这种问题我的建议是使用IDE来进行开发,我推荐使用visual studio code,然后安装python插件,在状态栏那里选择你的python版本
此时代码就会有提示了,如果你写的代码有问题就会在这里显示出来
此处代码专供cv使用,让你在cv的时候更爽,更直接。
# 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()))
# 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()))
# 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()))
# 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()))
# 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()))
# 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()))
# selenium 3 & 4
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager
driver = webdriver.Opera(executable_path=OperaDriverManager().install())
# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
# 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())
# 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())
# selenium 3
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import IEDriverManager
driver = webdriver.Ie(IEDriverManager().install())
# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
# selenium 3 & 4
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager
driver = webdriver.Opera(executable_path=OperaDriverManager().install())
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那必然是很舒服的,我也是这么想的。
‘
如果说你遇到了问题,并且不是以上这种的问题,那么请直接私信我。