在使用 Selenium 自动执行测试时如何处理在调试器中暂停的覆盖

How to deal with the overlay Paused in debugger while automated test execution using Selenium

每次我尝试访问这个 website and open 我都无法通过检查器检查任何元素,因为 UI 有一个覆盖层和一条消息 Paused in debugger.

upvoted and accepted answer of this discussion 说要检查“源”选项卡,如果您在 'Mouse' 下设置了任何断点,请在“事件侦听器断点”面板下检查。我已经交叉检查 Sources -> EventListenerBreakpoint 的 none 是否已设置。

upvoted and accepted answer of this discussion 说要检查小八角形 stop/pause 标志(在 Chrome "Sources" 的左下角)是否有颜色(蓝色或紫色)。我不确定为什么我需要为选定的网站额外执行此操作。

快照:

upvoted and accepted answer of this discussion 谈到了手动步骤

所有解决方案似乎都指向手动过程。但在我看来,这个问题是 无法 getPageSource().

背后的根本原因

代码试验:

System.setProperty("webdriver.chrome.driver", "C:\Utility\BrowserDrivers\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");

输出:Chrome 打开但没有导航到 url。

所以我的问题是:

  • 什么情况下会出现Paused in debugger错误?

    任何时候您在打开开发工具的情况下访问此页面。 debugger; 行将暂停 javascript 执行,但如果开发工具关闭,浏览器将忽略它。

  • 是否是前端开发的错误?

    在这种情况下,不——他们是故意把你拒之门外。此函数的目的是暂停执行,然后在恢复时间超过 100 毫秒时将浏览器重定向到其他页面。我推测这是为了干扰像 selenium 这样的自动爬虫,因为普通用户不会受到影响,人类开发人员可以绕过它。

  • 如何通过 Selenium 在自动测试期间绕过此错误?

我的第一个建议是尝试 运行 Selenium,如果可以的话。如果没有,使用热键恢复执行 (F8)。 您可以使用任何您喜欢的方法来生成按键;使用 java.awt 包,它看起来像这样:

Robot robot = null;
try
{
   robot = new Robot();
}
catch(Exception e)
{
   //handle failure
}
robot.keyPress(KeyEvent.VK_F8);

请记住,您必须在 100 毫秒内触发它,因此请使用您喜欢的任何逻辑来检测块并快速响应。如果你只是想要一些快速而肮脏的东西,我会让它每隔 50 毫秒发送一次 F8 按键,持续一段时间,直到你确定页面已加载。

编辑: 经进一步调查,此页面非常混乱,并且对任何打开开发工具的人都有敌意。触发 debugger; 的函数不止一个,而且只要您在页面上,它们就会在计时器上重复调用。 运行 headlessly 似乎是最好的选择,除非你想在整个会话中继续发送垃圾邮件 F8。