【问题标题】:Selenium Remote Webdriver not working with AWS EC2Selenium 远程 Webdriver 无法与 AWS EC2 一起使用
【发布时间】:2017-11-02 23:11:02
【问题描述】:

我正在尝试进行一些网站测试,这需要保持旧 webdriver 打开,然后使用 webdriver.remote 使用旧驱动程序的执行程序 url 和会话 id 重新附加。相同的代码在我的 MacBook 上运行良好,但在 AWS EC2 Ubuntu 16.04 上运行出错。错误回溯和代码附在下面。请帮忙。

操作系统:Ubuntu 16.04

硒版本:3.4.0

浏览器:谷歌浏览器

【问题讨论】:

  • 默认的 Ubuntu 安装没有安装窗口系统。您是否安装了窗口系统和 Chrome?
  • @stdunbar 因为它是 AWS EC2 实例,所以没有 GUI。我通过终端运行代码,并且还设置了无头的 webdriver。不确定安装窗口系统是否有帮助。
  • 没有 GUI Chrome 无法运行。无头只是意味着没有连接显示器。
  • @stdunbar 这里还是有点困惑。我能够创建 Webdriver.Chrome 并且 ChromeDriver 能够访问我指向的任何 url。如果你注释掉我代码的 driver2 部分,一切都会运行。
  • 我建议尝试ghost浏览器或phantomJS驱动,因为没有GUI。

标签: selenium ubuntu selenium-webdriver amazon-ec2 selenium-chromedriver


【解决方案1】:

为这个问题挖掘了这么久,我终于自己找到了解决方案。事实证明,没有 GUI 的 Ubuntu 处理起来很痛苦。因此,当您尝试启动 Selenium Webdriver 时。您需要添加一些选项,不仅是常规的 webdriver.Chrome,还需要添加 webdriver.Remote。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import 
DesiredCapabilities

options = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/google-chrome'
options.add_argument('headless')
options.add_argument('--no-sandbox')

driver = webdriver.Chrome(chrome_options=options)
executor_url = driver.command_executor._url
session_id = driver.session_id
driver.get("http://www.google.com")

print(session_id)
print(executor_url)

print(driver.current_url)

driver2 = webdriver.Remote(command_executor=executor_url, desired_capabilities=options.to_capabilities())
driver2.close()
driver2.session_id = session_id
print(driver2.current_url)
driver2.get("http://www.facebook.com")
print(driver2.current_url)

另外,拥有 webdriver.remote 也会打开一个僵尸网络驱动程序。如果您只关心重新附加到现有的 webdriver。您可以先关闭新驱动,再将新驱动连接回旧驱动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多