简体   繁体   English

Python Selenium 和 Chromedriver CentOS8

[英]Python Selenium and Chromedriver CentOS8

I have a python script which use selenium and chromedriver.我有一个 python 脚本,它使用 selenium 和 chromedriver。 It runs on my CentOS8 VPS perfectly for 3 days without any problem.它在我的 CentOS8 VPS 上完美运行了 3 天,没有任何问题。

But since this morning, the script launched, wait almost 80 secondes and display this:但是从今天早上开始,脚本启动,等待将近 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

No modification have been made, why does it fail now?没有修改过,为什么现在失败了? I don't have any screen on my VPS so I can't see more information.我的 VPS 上没有任何屏幕,所以看不到更多信息。

Here is some info:这是一些信息:

yum info on chromedriver: chromedriver 上的 yum 信息:

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

google-chrome --version:谷歌浏览器——版本:

Google Chrome 87.0.4280.141 

Begin of the script:脚本的开头:

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

Problem solved but don't understand how.问题已解决,但不明白如何解决。 I just restart my VPS (reboot), and... it works again.我只是重新启动我的 VPS(重新启动),然后......它再次工作。 Weird诡异的

EDIT: Find why: I just made a mistake at the end of my script.编辑:找出原因:我只是在脚本末尾犯了一个错误。 b;close(), But "b" don't exist. b;close(),但是“b”不存在。 my driver variable name is "driver".我的驱动程序变量名称是“驱动程序”。

The exception was catched and not displayed, so I don't saw anything.异常被捕获但没有显示,所以我什么也没看到。 But today, I launch a "top" command, and see all "chrome" process running in background.但是今天,我启动了一个“top”命令,看到所有“chrome”进程都在后台运行。

Probably after several days, memory was full, and Chrome can't launch.可能几天后,memory 已满,Chrome 无法启动。 The error was not clear but anyway, it was my fault.错误不清楚,但无论如何,这是我的错。

Thumb rule拇指法则

A common cause for Chrome to crash during startup is running Chrome as root user ( administrator ) on Linux. While it is possible to work around this issue by passing --no-sandbox flag when creating your WebDriver session, such a configuration is unsupported and highly discouraged. Chrome 在启动期间崩溃的一个常见原因是在 Linux 上以root用户( administrator )身份运行 Chrome。虽然可以通过在创建 WebDriver session 时传递--no-sandbox标志来解决此问题,但此类配置不受支持并且非常气馁。 You need to configure your environment to run Chrome as a regular user instead.您需要将环境配置为以普通用户身份运行 Chrome。


Solution解决方案

Remove the following chrome_options :删除以下chrome_options

  • --no-sandbox

and execute your code as a non root user.并以非 root用户身份执行您的代码。


Outro结局

Here is the link to the Sandbox story.这是Sandbox故事的链接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM