Python Selenium and Chromedriver CentOS8



我有一个使用selenium和chromedriver的python脚本。它在我的CentOS8VPS上完美运行了3天,没有任何问题。

但从今天早上开始,脚本启动,等待近80秒并显示以下内容:

[12/Jan/2021 23:04:51] ERROR - Failed : Message: chrome not reachable
Traceback (most recent call last):
File "script.py", line 55, in <module>
driver = launch()
File "script.py", line 37, in launch
browser = webdriver.Chrome('/usr/bin/chromedriver',chrome_options=chrome_options)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable

没有进行任何修改,为什么现在失败了?我的VPS上没有任何屏幕,所以我看不到更多信息。

以下是一些信息:

chromedriver上的yum-info:

Nom          : chromedriver
Version      : 87.0.4280.88
Publication  : 1.el8
Architecture : x86_64
Taille       : 27 M
Source       : chromium-87.0.4280.88-1.el8.src.rpm
Dépôt        : @System
Depuis le dé : epel

谷歌chrome--版本:

Google Chrome 87.0.4280.141 

脚本开始:

from dotenv import load_dotenv
from logger import logger as l
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.options import Options
import time
import sys
import subprocess
load_dotenv(verbose=True)
dotenv_path = '.env'
load_dotenv(dotenv_path)
def launch():
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
browser = webdriver.Chrome('/usr/bin/chromedriver',chrome_options=chrome_options)
l.info('Started Chrome')
return browser

问题解决了,但不知道如何解决。我只是重新启动我的VPS(重新启动(,然后。。。它又起作用了。奇怪的

编辑:找出原因!我只是在剧本结尾犯了一个错误:b.关闭((;但是";b";不存在,我的驱动程序变量名是"驾驶员";。

异常被捕获,没有显示,所以我什么也没看到。但今天,我推出了一款";顶部";命令,并查看所有";铬";进程在后台运行。

可能几天后,内存已满,Chrome无法启动。这个错误不清楚,但不管怎样,都是我的错。

拇指规则

Chrome在启动过程中崩溃的一个常见原因是在Linux上以root用户(administrator(的身份运行Chrome。虽然在创建WebDriver会话时可以通过传递--no-sandbox标志来解决此问题,但这种配置是不受支持的,并且非常不鼓励。您需要将环境配置为以常规用户身份运行Chrome


解决方案

删除以下chrome_options:

  • --no-sandbox

并以非root用户身份执行代码。


室外

这是沙盒故事的链接。

最新更新