linux Selenium和Pyvirutal在Mac上不能一起工作

txu3uszq  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(86)

我一直在Linux上使用Selenium和python pyvirutaldisplay库来让webdriver完全在虚拟显示窗口中运行。然而,代码在Mac机器上使用时并不符合预期。基本情况如下:

from selenium import webdriver
from pyvirutaldisplay import Display

d = Display()
d.start()
driver = webdriver.Chrome()

在Linux上会发生什么,我希望发生的是打开一个虚拟显示器,然后将webdriver应用于它。然而,在Mac上发生的是,创建虚拟显示器,然后启动webdriver,但不应用于虚拟显示器。
我真的不知道为什么会这样。我不确定这是否是因为Mac GUI应用程序的行为与Linux上的不同,所以pyvirutaldisplay设置“xml 2”环境变量并启动Xvfb服务器不足以将webdriver应用于新的显示器。我不知道,任何帮助将不胜感激。
如果它有助于问题中的Mac在操作系统上:文图拉13.5.2. Selenium版本:4.4.2.浏览器为Chromedriver 117.0.5938.88。我还在Mac上安装了xquartz,并将Xvfb添加到PATH。
提前感谢!

lrl1mhuk

lrl1mhuk1#

如果你的目标是在Mac上运行无头测试,你可以使用新的无头模式(--headless=new),它的工作原理与普通的有头Chrome相同:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)

在网站上,它和Chrome之间唯一明显的区别是用户代理。如果保持不变对您很重要,请修改用户代理,将HeadlessChrome替换为Chrome
此外,作为pyvirtualdisplay的替代方案,您可以使用sbvirtualdisplay,它是专门为虚拟运行的Selenium设计的。它被流行的Selenium框架使用,比如https://github.com/seleniumbase/SeleniumBase
示例用法:

from sbvirtualdisplay import Display

display = Display(visible=0, size=(1440, 1880))
display.start()

# Run browser tests in a headless environment

display.stop()

这也包括上下文管理器格式:

from sbvirtualdisplay import Display

with Display(visible=0, size=(1440, 1880)):
    # Run browser tests in a headless environment
    ...

相关问题