问题描述:

用pycharm运行代码打开chrome浏览器后,浏览器自动退出。代码如下:

from selenium import webdriver
driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

运行环境:

pycharm版本:2022.3

python版本:3.9.10

分析:

并没有设置quit(),代码执行也没有报错,在网上搜索一番后可能的解释和解决方法如下:

1、代码执行结束后线程随主程序一起结束,内存被回收,浏览器自动关闭。(解释这问题属于正常现象,想要保留浏览器可以设置sleep())

2、因为把driver = webdriver.Chrome()放在了函数内部,函数执行完毕后,程序内所有的步骤都结束了,这段程序的进程也就结束了,浏览器包含在内,所以才会自动退出,解决方法就是设置全局变量,即把打开浏览器的操作放在函数外部,函数执行完毕,浏览器也不会关闭。(我的代码没有函数,所以也不是这个问题)

3、webdriver要与浏览器的版本号匹配,不然浏览器就会闪退。(这个现象是浏览器闪退,并且代码执行会有报错,而且我的版本号也是匹配的,显然不是这个问题)

附上查看版本号代码如下:

from selenium import webdriver
driver = webdriver.Chrome()

str1 = driver.capabilities['browserVersion']    #查看chrome版本
str2 = driver.capabilities['chrome']['chromedriverVersion'].split(' ')[0]   #查看python下的chromedriver版本
print(str1)
print(str2)

运行结果:

(只要大版本号一致就行)

顺便再附上chromedriver下载地址:

http://chromedriver.storage.googleapis.com/index.html

chromedriver.exe文件存放位置(以下路径只是参考,根据实际环境来):

1)、python安装目录:C:\Users\username\AppData\Local\Programs\Python\Python39

2)、chrome安装目录:C:\Program Files\Google\Chrome\Application(可以不放)

2023.4.7编辑更新:经测试,安装了selenium版本4.8.3的情况下,即使chromedriver.exe文件不放在python安装目录下,运行代码也不会报错,会自动在C:\Users\用户名\.cache\selenium\chromedriver\win32\目录下自动生成chromedriver.exe文件。这是老版本selenium没有的功能,大大方便了运行维护,不用手动更换文件了,现在会自动生成了。

解决方法:

网上找了一圈后大致就是以上这3个观点,但是看其他人运行相同的代码,别人的chrome就不会自动退出,经过排查,最终确定,问题的原因竟是selenium的版本太高导致,我的selenium的版本是4.7.2,不会自动退出的版本是4.4.3。

卸载4.7.2,重新安装4.4.3,问题解决。

备注1:截止到发这篇文章时,selenium最高版本是4.7.2。

备注2:我挑了4.4.3发现解决了问题,所以也就没有再试其他的版本,也许其他的低版本也可以解决问题。

杂谈:

也许这个chrome自动退出的问题其实并不是个问题,代码成功运行结束,浏览器关闭,可能在selenium4.7.2版本上就是这样运行的,而低版本的selenium在代码运行完成之后就不会自动关闭浏览器,目前来说我比较喜欢后者,所以选择了安装4.4.3。

希望可以帮助到遇到和我一样问题的小伙伴,感谢阅读!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐