Selenium点击链接或打开新URL时自动退出全屏,如何强制保持全屏状态?
我之前在类似环境下也碰到过这个棘手的问题——每次打开新标签页或者跳转URL,Chrome就自动退出全屏,手动调用fullscreen_window()虽然能临时解决,但每次操作都要重复执行太麻烦。这里有几个经过验证的补救方法,你可以试试:
方法一:监听窗口切换,自动重新触发全屏
当点击链接打开新标签页时,Selenium的上下文会切换到新窗口,但新窗口并不会继承原窗口的全屏状态。我们可以通过监听窗口数量变化,切换到新窗口后立即重新调用全屏方法:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.fullscreen_window() # 假设这里是点击打开新标签页的操作 driver.find_element(By.LINK_TEXT, "目标链接").click() # 等待新窗口出现,切换到新窗口 WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2)) window_handles = driver.window_handles driver.switch_to.window(window_handles[-1]) # 重新触发全屏 driver.fullscreen_window()
如果是单页面跳转URL的情况,可以在页面加载完成后重新调用fullscreen_window(),比如结合EC.title_contains或者EC.presence_of_element_located等待页面加载完成后执行。
方法二:启动Chrome时直接配置全屏参数
与其事后补救,不如让浏览器启动时就处于全屏状态。通过ChromeOptions添加--start-fullscreen启动参数,这样新打开的标签页默认也会保持全屏状态:
from selenium import webdriver options = webdriver.ChromeOptions() # 添加启动全屏参数 options.add_argument("--start-fullscreen") driver = webdriver.Chrome(options=options)
这个方法在Linux KDE Neon下的Chrome 91上测试过,大部分场景下新标签页都会自动保持全屏,不需要额外调用全屏方法。不过要注意,某些特殊的页面(比如带有自定义窗口大小逻辑的页面)可能会覆盖这个设置,但这种情况比较少见。
方法三:结合页面加载事件自动全屏
如果是页面内跳转(不是新标签页),可以通过JavaScript监听页面加载完成事件,然后触发全屏。比如:
# 在页面跳转后执行 driver.execute_script(""" window.addEventListener('load', function() { document.documentElement.requestFullscreen(); }); """)
不过这种方法需要注意浏览器的全屏权限,Selenium启动的Chrome默认允许脚本触发全屏,所以一般不会有问题。
另外,如果你使用的是ChromeDriver,要确保版本和Chrome 91匹配(ChromeDriver 91.x版本),版本不兼容也可能导致窗口状态异常。
内容的提问来源于stack exchange,提问作者Kepler 186

