在docker中如何用铬来运行selenium

我在Docker中安装了google-chrome,但是当我运行我的python脚本selenium时,它失败了,如下所示:

automation@1c17781fef0c:/topology-editor/test$ python test.py Traceback (most recent call last): File "test.py", line 27, in <module> browser = webdriver.Chrome() File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__ desired_capabilities=desired_capabilities) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__ self.start_session(desired_capabilities, browser_profile) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 185, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 249, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 4.4.0-83-generic x86_64) 

如果我直接在docker中运行google-chrome,则会显示如下:

 automation@1c17781fef0c:/topology-editor/test$ google-chrome Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted Trace/breakpoint trap (core dumped) automation@1c17781fef0c:/topology-editor/test$ 

系统:

 $ uname -a Linux 1c17781fef0c 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux $ google-chrome --version Google Chrome 60.0.3112.78 $ chromedriver --version ChromeDriver 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8) 

你需要启动一个独立的浏览器

 docker run -d -p 4444:4444 selenium/standalone-chrome 

然后在您的Python脚本启动浏览器使用远程webdriver

 from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub", DesiredCapabilities.CHROME) 

如果你想要,你也可以启动一个Selenium Grid中心

我假设你需要在无头模式下运行它

https://developers.google.com/web/updates/2017/04/headless-chrome

这是我如何做的ruby

 capabilities = Selenium::WebDriver::Remote::Capabilities.chrome( chromeOptions: {args: %w[ no-sandbox headless disable-gpu window-size=1280,1000 ]}) Capybara::Selenium::Driver.new(app, :browser => :chrome, http_client: client, desired_capabilities: capabilities) 

你可以在Python中适应你的代码

还要考虑安装一些chrome需要在无头上运行的字体库

 RUN apt-get update && \ apt-get -qq -y install libxpm4 libxrender1 libgtk2.0-0 libnss3\ libgconf-2-4 libpango1.0-0 libxss1 libxtst6 fonts-liberation\ libappindicator1 xdg-utils RUN apt-get -y install \ xvfb gtk2-engines-pixbuf \ xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable \ imagemagick x11-apps zip