将
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的连接位置。它的设置方式与您期望的设置方式不同。
这是您的代码发生的情况:
您创建的实例
FirefoxBinary
。如果您阅读源代码,将会看到在创建此类的对象时, 它会复制os.environ
(环境)。您可以
pyvirtualdisplay.Display
使用创建一个显示并将其用作上下文管理器。当你进入的背景下,显示器会改变os.environ
,这样只要上下文中的效果,DISPLAY
环境变量被设置成X客户端将连接到新的显示,而不是什么DISPLAY
是 之前 的背景下生效。您创建您的驱动程序。使用Chrome时,一切都很好,因为Chrome将从
DISPLAY
修改后的环境中获取其变量。但是,当您使用Firefox时,它将使用 第一步中复制 的DISPLAY
环境 中的环境。 这个环境包括一个值DISPLAY
是 之前 在上一步骤中所描述的变化,所以它不会连接到您创建的新的显示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)