由Selenium启动的Firefox将忽略pyvirtualdisplay创建的显示

由Selenium启动的Firefox将忽略pyvirtualdisplay创建的显示,第1张

由Selenium启动的Firefox将忽略pyvirtualdisplay创建显示

FirefoxBinary
对象的创建移动到由
pyvirtualdisplay.Display
以下内容管理的上下文中:

from selenium import webdriverfrom selenium.webdriver.firefox.webdriver import FirefoxBinaryimport pyvirtualdisplaywith pyvirtualdisplay.Display(visible=True):    if True:  # Set to False to use Chrome...        binary = FirefoxBinary()        driver = webdriver.Firefox(None, binary)    else:        driver = webdriver.Chrome()    driver.get("http://www.google.com")    driver.quit()
说明

问题是幕后发生了什么。名为的环境变量

DISPLAY
决定了Firefox和Chrome的连接位置。它的设置方式与您期望的设置方式不同。

这是您的代码发生的情况:

  1. 您创建的实例

    FirefoxBinary
    。如果您阅读源代码,将会看到在创建此类的对象时, 它会复制
    os.environ
    (环境)

  2. 您可以

    pyvirtualdisplay.Display
    使用创建一个显示并将其用作上下文管理器。当你进入的背景下,显示器会改变
    os.environ
    ,这样只要上下文中的效果,
    DISPLAY
    环境变量被设置成X客户端将连接到新的显示,而不是什么
    DISPLAY
    之前 的背景下生效。

  3. 您创建您的驱动程序。使用Chrome时,一切都很好,因为Chrome将从

    DISPLAY
    修改后的环境中获取其变量。但是,当您使用Firefox时,它将使用 第一步中复制
    DISPLAY
    环境 中的环境。 这个环境包括一个值
    DISPLAY
    之前 在上一步骤中所描述的变化,所以它不会连接到您创建的新的显示。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存