如果我在Chrome选项中指定user-data-dir,则Selenium chromedriver会挂起

时间:2017-01-30 17:09:55

标签: python python-2.7 selenium selenium-chromedriver

如果我指定chrome_options,那么它会挂起:

params = {'executable_path': path_to_driver}
if self._chrome_options is not None:
    params['chrome_options'] = self._chrome_options
print "# before construct"
self._driver = webdriver.Chrome(**params)
print "# after construct"

因此,未显示消息after_construct。在chrome_options我传递了字符串:

user-data-dir=/home/sergzach/.config/google-chrome 

因此,Chrome正在启动并进入我的正常配置文件。但Python脚本在构建self._driver时会挂起,我无法继续使用Python脚本。

如果我没有通过self._chrome_optionsNone),那么一切正常:Chrome正在启动并且执行速度更快(before_constructafter_construct正在打印)。

如果我传递空chrome_options

webdriver.ChromeOptions()

然后它就不会挂起。

  

已安装的Chrome版本: 55.0.2883.75(64位)

     

webdriver版本: 2.25.426924

     

操作系统: Ubuntu。

更新

有一个追溯(它在脚本挂起后大约20秒内升起):

File "test.py", line 6, in <module> w.start() File "/usr/local/lib/python2.7/dist-packages/walker/walker.py", line 164, in start self._driver = webdriver.Chrome(**params) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__ desired_capabilities=desired_capabilities) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 92, in __init__ self.start_session(desired_capabilities, browser_profile) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 179, in start_session response = self.execute(Command.NEW_SESSION, capabilities) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.2.0-42-generic x86_64

更新

这是因为Chrome无法连接到远程调试器。我输出日志:

... params.update(service_args=['--verbose']) params.update(service_log_path='/tmp/selenium.log') ... self._chrome_options.add_argument("--verbose") ...

我看到了reason。但我没有意识到如何关闭传递给chrome驱动程序的选项--remote-debugging-port=xxxx。好的,让我们进一步分析这些来源。

2 个答案:

答案 0 :(得分:1)

唯一一个客户端可以一次连接到调试器。因此,要解决此问题,当我们想要使用调试器输入用户配置文件时 - 为了避免chromedriver挂起尝试连接到调试器,我们必须关闭现有的Chrome会话(我再次共享this conversation) 。

答案 1 :(得分:0)

通过首先杀死所有镀铬工艺来解决这个问题。

import psutil

for proc in psutil.process_iter():
print(proc)
# check whether the process name matches
if proc.name() == 'chrome' or proc.name() == 'chromedriver':
    proc.kill()