我今天得到了社区的一些帮助,希望有人可以让我在这个小小的方向上找到正确的方向。
我有一个循环,我试图加载许多不同的网页,但目前同一个网页在另一个窗口打开。
如何在单独显示中打开它们?有没有办法标记显示?
for d in data["screen"]:
screen_list["code"]))
display = Display(visible=1, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get("https://" + d["server"] + "/test/")
被修改
为了改善答案,我编写了一个快速脚本,尝试加载显示在不同网页上的两个不同的显示,但它会在同一个窗口中加载两个网页
import sys
import os
from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.common.keys import Keys
display = Display(visible=1, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get("https://news.bbc.co.uk")
display2 = Display(visible=1, size=(800, 600))
display2.start()
driver2 = webdriver.Chrome()
driver2.get("https://www.google.com")
被修改
我认为问题是脚本在端口上打开了一个xephyr会话,然后chrome驱动程序只会与该会话通信,那么你能为每个driver.get("")
请求打开多个xephyr会话吗?
答案 0 :(得分:2)
好的,我在这里重现了这个问题。当我发现这个问题时,我几乎打了一巴掌,因为一旦所有的碎片在一起,它就显而易见了。 问题是,您在第一个显示之后开始的显示没有连接到您的"真实" X服务器。他们彼此联系。这里发生了什么:
您创建一个显示并在其上调用start()
方法。此start
方法启动新的Xephyr实例并有助于更改DISPLAY
环境,以便连接到X的后续进程连接到新的Xephyr实例。
启动Chrome,连接到新的Xephyr实例。耶!
您创建了一个新的显示,有意连接到第一个Xephyr实例,而不是您的"真实" X服务器。由于它与第一个Xephyr具有相同的尺寸,因此它占用了第一个显示器的整个空间并完全阻碍了之前创建的Chrome浏览器的视图。看起来你只有一个Xephyr正在运行,但有两个正在运行(例如,可以使用ps
确定)。
新的Chrome实例会显示在嵌入式显示屏中。您有两个Chrome运行实例,但无法看到早期版本。
您需要做的是在创建新的Display
之前,将DISPLAY
重置为开始创建显示之前的内容。这里的代码有效:
import sys
import os
from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.common.keys import Keys
orig = os.environ["DISPLAY"]
display = Display(visible=1, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get("https://news.bbc.co.uk")
# You have to do this between each new Display.
os.environ["DISPLAY"] = orig
display2 = Display(visible=1, size=(800, 600))
display2.start()
driver2 = webdriver.Chrome()
driver2.get("https://www.google.com")