为了帮助调试这个问题,您可以使用
service_log_path
和
service_args
参数来查看chromedriver的输出:
service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
service_args=service_args,
service_log_path=service_log_path)
我曾遇到相同的异常信息,并发现两种方法可以解决它;我不确定楼主的问题是否相同,但如果不是的话,看一下chromedriver日志可能会有所帮助。通过查看我的日志,我发现chromedriver(在尝试修复此问题时尝试了2.9到2.6)以非常意外的方式决定要在哪个浏览器中运行。在我的chromedriver所在目录中,我有以下文件:
$ ls -l /path/to/
-rwx------ 1 pjh grad_cs 5503600 Feb 3 00:07 chromedriver-2.9
drwxr-xr-x 3 pjh grad_cs 4096 Mar 28 15:51 chromium
当我使用与原帖作者相同的Python代码调用Chromedriver时:
driver = webdriver.Chrome('/path/to/chromedriver-2.9')
这会导致异常信息。在chromedriver.log中,我找到了这条消息:
[1.043][INFO]: Launching chrome: /path/to/chromium ...
难以置信!chromedriver 正在尝试使用 /path/to/chromium
(这不是可执行文件,而是一个包含源代码的目录)作为浏览器来执行!显然,chromedriver 在搜索我的 PATH
之前会在当前目录下搜索可运行的浏览器。因此,解决此问题的一种简单方法是检查 chromedriver
所在的目录中是否存在像 chrome
和 chromium
这样的文件/目录,并将它们移动到与 chromedriver
不同的目录中。
更好的解决方案是通过使用 chrome_options 参数明确告诉 selenium / chromedriver 要执行的浏览器:
options = webdriver.ChromeOptions()
options.binary_location = '/opt/google/chrome/google-chrome'
service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
chrome_options=options,
service_args=service_args,
service_log_path=service_log_path)
chromedriver.log现在显示:
[0.999][INFO]: Launching chrome: /opt/google/chrome/google-chrome ...
如预期。