在开始之前:我知道有十亿篇关于 Selenium 不起作用的帖子,以及各种解决方案可供尝试。我相信我已经尝试了一切,但如果我遗漏了什么,请原谅我。我正在用头撞墙,希望得到帮助。
以下是我采取的一些步骤:
我下载了 selenium 的 chromedriver(Ubuntu、Python),并使用
chmod 755
和 chmod 777
使驱动程序可执行。之后,我用./chromedriver
启动了chromedriver。
我尝试了 Selenium 的各种选项,包括手动添加 chromedriver 运行的端口
from selenium import webdriver
options = webdriver.ChromeOptions()
options.binary_location = "/home/myname/projects/myproject/chromedriver"
options.add_argument("--remote-debugging-port=9515")
chrome_driver_binary = '/home/myname/projects/myproject/chromedriver'
driver = webdriver.Chrome(chrome_driver_binary, options = options)
driver.get('http://www.ubuntu.com/')
我尝试过其他帖子中建议的选项,如下所示:
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--disable-setuid-sandbox")
我已确保我使用的 chromedriver 与我的 Chrome 版本兼容。
似乎没有任何效果。我不断收到此错误:
WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(chrome not reachable)
(The process started from chrome location /home/myname/projects/myproject/chromedriver is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
我真诚地感谢其他人对这个问题的解释。
您需要注意以下几件事:
options.binary_location
:指的是 google-chrome 二进制位置,如果 Google Chrome 未安装在默认位置,则使用该位置。请参阅:WebDriverException:未知错误:对于旧版本的 Google Chrome,无法在 Python 中找到带有 Selenium 的 Chrome 二进制错误
--remote-debugging-port
:如果您不是远程调试,则可以安全地删除此参数。
chrome_driver_binary
:指的是 ChromeDriver 在系统中的绝对位置。
webdriver.Chrome(chrome_driver_binary, options = options)
:此外,您可能想添加 key executable_path,如下所示:
chrome_driver_binary = '/home/myname/projects/myproject/chromedriver'
driver = webdriver.Chrome(executable_path=chrome_driver_binary, options = options)
driver.get('http://www.ubuntu.com/')
--no-sandbox
、--headless
、--disable-dev-shm-usage
、--disable-setuid-sandbox
等是可选设置,您可能不需要启动。
启动Selenium驱动的ChromeDriver启动google-chrome浏览上下文的最小代码块可以是:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
driver = webdriver.Chrome(executable_path='/home/myname/projects/myproject/chromedriver', options=options)
driver.get("http://www.ubuntu.com/")
Chrome 在启动期间崩溃的一个常见原因是在 Linux 上以
用户 (root
) 身份运行 Chrome。虽然可以通过在创建 WebDriver 会话时传递administrator
标志来解决此问题,但此类配置不受支持且强烈建议不要这样做。您需要配置环境才能以普通用户身份运行 Chrome。--no-sandbox
您可以在以下位置找到一些相关的详细讨论:
我费尽心思在我的系统上启动 Chrome 浏览器,但最终以下代码在 Windows 11 上对我有用,从这次崩溃中恢复并启动 Chrome 浏览器:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=chrome_options)
driver.close()
注意: