Python中selenium自动化测试网页时,为何必须晃动鼠标才能避免超时?
环境:wind10,chrome65/redhat7.4,chrome65
远程操作,vnc 或者远程桌面做自动化测试的时候,总是需要晃动下鼠标,不然程序就会超时报出异常,这个要怎么破?以前有人说是远程的问题,觉得 selenium 不至于啊,应该考虑到了这个远程的问题啊
请教大家这个怎么破解呢?
Python中selenium自动化测试网页时,为何必须晃动鼠标才能避免超时?
远端的 windows 有休眠机制吧,selenium 是应用层的又决定不了系统层的事
我明白你的问题。你在用Selenium做自动化测试时,发现有时候脚本会卡住或者超时,但手动晃动一下鼠标,脚本又能继续跑了,对吧?
这其实是个挺经典的坑,根源在于浏览器的“节流”或“节能”机制。很多现代浏览器(比如Chrome)为了省电,当它检测到一段时间没有用户交互(比如鼠标移动、键盘输入)时,会主动降低后台标签页的JavaScript执行速度或定时器的精度,甚至暂停一些非必要的渲染任务。Selenium驱动的浏览器,如果没有模拟出“用户活动”,就会被浏览器判定为“非活动页面”,从而被限流。
你的脚本可能卡在某个需要页面完全加载或等待JavaScript执行完成的操作上(比如 WebDriverWait)。因为浏览器被“节流”了,页面加载或JS执行变得极慢甚至停滞,导致Selenium的等待条件一直无法满足,最终超时。你一动鼠标,相当于向浏览器发送了“用户活动”信号,它立刻解除限制,一切就恢复正常了。
根本的解决办法不是去晃动鼠标,而是通过启动选项告诉浏览器:“别给我节流,我是自动化测试”。
这里给你一个完整的、可运行的Chrome示例。关键就是添加 --disable-background-timer-throttling 和 --disable-renderer-backgrounding 这两个参数。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 1. 设置Chrome选项,禁用后台节流
chrome_options = Options()
chrome_options.add_argument("--disable-background-timer-throttling")
chrome_options.add_argument("--disable-renderer-backgrounding")
# 可选:为了更稳定的自动化环境,通常还会加上下面这两个
chrome_options.add_argument("--disable-backgrounding-occluded-windows")
chrome_options.add_argument("--disable-popup-blocking")
# 如果不需要GUI界面,可以无头运行
# chrome_options.add_argument("--headless")
# 2. 使用这些选项启动浏览器
driver = webdriver.Chrome(options=chrome_options)
try:
# 3. 你的测试脚本
driver.get("https://www.example.com")
# 使用显式等待,而不是死等
wait = WebDriverWait(driver, 10)
# 假设等待某个元素出现
element = wait.until(
EC.presence_of_element_located((By.TAG_NAME, "h1"))
)
print(f"页面标题元素找到: {element.text}")
# ... 这里执行你的其他测试操作 ...
finally:
# 4. 记得关闭浏览器
driver.quit()
总结一下: 别用晃动鼠标这种歪招,正确的姿势是通过浏览器启动参数禁用后台优化。
一句话建议: 在启动浏览器时添加 --disable-background-timer-throttling 参数即可。
试试禁用远程系统休眠。
已经取消了 windows 休眠,rhel7 的屏保,可是还是会发生超时,一个现象就是晃动鼠标,就会运行加速一下。
没用过,测 chrome 推荐用官方的 puppeteer
问题是 firefox,chrome 都会发生这种事情,需要晃动鼠标刺激一下,要不就超时了。
现在在 windows 下用鼠标精灵来定时刺激;
rhel 没想到什么方法来做。
那你就用 autogui 晃一下鼠标
有没有根治的方法呢
不就是 session 过期的问题吗
看下 driver 里面有没有设置超时的
有啊,设置了超时啊,webdriverwait 都有设置啊,可是总觉得不是 session 过期,为什么鼠标刺激一下,就能加快测试呢
好像是有这个问题,我用 Linux 的 Selenium Grid Docker
docker 上也会这样?觉得好多人没有遇到这个问题,难道大家都是看着程序自己运行?不做别的?
话说有解决方案吗?插入一段 autogui 代码?

