如何在使用 Selenium 打开新标签时阻止 Windows 虚拟桌面和前台工作的自动切换?

您好,

我正在使用 Selenium 在 Windows 系统上为我的项目自动打开新的浏览器标签。问题是,每当打开新标签时,不仅会自动切换到运行浏览器的虚拟桌面,而且还会干扰我在前台的工作。

这个行为是相当干扰的,因为我希望同时进行人工工作和自动化任务,而它们互不干扰。

我已经尝试了一些可能的解决方案,但没有成功。我想要的是让浏览器的自动操作在后台运行,不影响我的其他工作,而无需使用无头模式。

请问有人遇到过类似的问题吗?有没有可行的解决方案或建议?

非常感谢!

这么多硬条件无法妥协的话,只有一种方法,电脑开个虚拟机,在虚拟机部署代码,或者使用服务器。

浏览器默认需要GUI界面渲染,同时会有一些键盘鼠标操作,而你手动操作会干扰selenium执行
建议使用无头模式

如果真想 使用GUI模式且不干扰其他,可以使用SeleniumHub(Selenium GRID)
这个可以使用Docker 部署,然后webdriver 指向

options = webdriver.EdgeOptions() # 这个地方用哪个options,就会启动哪个浏览器(主从机都会启动)
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444',options=options) # 远程grid连接
driver.get('http://www.baidu.com')

【以下回答由 GPT 生成】

我了解您的问题。Selenium 默认情况下在打开新标签时会自动切换到虚拟桌面,这会造成干扰。如果您不想使用无头模式,可以尝试以下解决方案来阻止 Windows 虚拟桌面和前台工作的自动切换:

  1. 安装 pygetwindow 和 pyautogui 库:
pip install pygetwindow pyautogui
  1. 在您的 Selenium 脚本中,添加以下代码获取浏览器窗口的句柄:
from pygetwindow import Point, getWindowWithTitle

# 获取浏览器窗口句柄
browser_window_title = "您的浏览器窗口标题"
browser_window = getWindowWithTitle(browser_window_title)
browser_handle = browser_window.handle
  1. 在打开新标签前后,使用 pyautogui 来激活浏览器窗口,并将焦点切换回前台:
import pyautogui

# 激活浏览器窗口
browser_window.activate()
# 将焦点切换回前台
pyautogui.hotkey("win")

这样,您的自动化脚本就会在后台运行,不会自动切换到虚拟桌面或干扰您的前台工作。

希望这个解决方案对您有帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^