python - 错误 : GDK_BACKEND does not match available displays; Running Selenium using Crontab

标签 python firefox selenium-webdriver cron

我正在尝试使用 cron 运行 selenium。

import os
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from pyvirtualdisplay import Display
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True


firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

binary = webdriver.firefox.firefox_binary.FirefoxBinary("/usr/bin/firefox")

now = datetime.datetime.now()
print "* Time of RUN : ",now

display = Display(visible=0, size=(1024, 768))
# display.start()
browser = webdriver.Firefox(firefox_binary=binary,executable_path=os.getcwd()+'/geckodriver')
browser.get('http://www.google.com')
print browser.title
browser.quit()

# display.stop()

以下是geckodriver.log中显示的错误

1525859641163   geckodriver INFO    geckodriver 0.20.1
1525859641167   geckodriver INFO    Listening on 127.0.0.1:34837
1525859642167   mozrunner::runner   INFO    Running command: "/usr/bin/firefox" "-marionette" "-profile" "/tmp/rust_mozprofile.1xUlJhxoO4Ar"
Error: GDK_BACKEND does not match available displays

我尝试过的事情:

  1. 尝试在没有显示的情况下运行 selenium (pyvirtualdisplay),即 headless selenium
  2. 在调用 webdriver.firefox() 时尝试了二进制参数
  3. 在 webdriver.firefox() 中尝试了 geckodriver excutable(linux)
  4. 在 cron 命令中使用 export Dispaly=:0;

最佳答案

  1. 更新最新的 geckodriver

  2. 下载最新的 firefox tarball 并按照此步骤操作

https://tecadmin.net/install-firefox-on-linux/

3.安装官方Firefox Beta PPA

  $ sudo apt-add-repository ppa:mozillateam/firefox-next

4.运行apt-get update

 $sudo apt-get update
  1. 安装 firefox 和 xvfb(X windows 虚拟帧缓冲区)包

    $ sudo apt-get install firefox xvfb
    
  2. 在后台运行 Xvfb 并指定显示编号(在我的示例中为 10)

    $ Xvfb :10 -ac &
    
  3. 将 DISPLAY 变量设置为您选择的数字

    $ export DISPLAY=:10
    
  4. 测试代码 #!/usr/bin/env python 从 selenium 导入 webdriver 浏览器 = webdriver.Firefox() browser.get('http://iAisystem.com/') 浏览器退出()

firefox 如果你下载为 tar,它有助于避免下载依赖文件

    wget http://ftp.mozilla.org/pub/firefox/releases/61.0/linux-x86_64/en-US/firefox-61.0.tar.bz2

注意你的 firefox 代码应该有 headless 选项以避免显示窗口。

关于python - 错误 : GDK_BACKEND does not match available displays; Running Selenium using Crontab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250580/

相关文章:

python - 如何使用python opencv从图像中删除隐藏标记?

javascript - 在没有 Firebug 的情况下使用 Selenium?

html - firefox 与 chrome 中的粗体文本和双边框问题

java - 如何使用 Selenium 中的标题在浏览器中选择一个元素?

selenium - 如何使用 Selenium 单击 Onclick Javascript 表单?

java - 在 BDD 中使用不同类型的参数调用相同的步骤

python - python中urllib的响应时间

python - 如何使用MySQL和Flask创建表和插入数据

python - 如何在 Mac OSX 上将 Python 的默认版本设置为 3.x 与 2.7?

JavaScript 可以在 Firefox 上运行,但不能在 Chrome 和 IE6 上运行