selenium - headless 谷歌浏览器 : How to prevent sites to know whether their window is focused or not

原文 标签 selenium selenium-webdriver puppeteer google-chrome-headless symfony-panther

有没有办法阻止网站知道它们是否可见?

也许是命令行标志?我在这里查过,但找不到合适的https://peter.sh/experiments/chromium-command-line-switches/ .

我认为他们使用页面可见性 API:https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API

最佳答案

如果您的目标是欺骗可见性 API,则将这段脚本注入(inject)相关页面或框架中:

await page.evaluate(`
    Object.defineProperty(window.document,'hidden',{get:function(){return false;},configurable:true});
    Object.defineProperty(window.document,'visibilityState',{get:function(){return 'visible';},configurable:true});
    window.document.dispatchEvent(new Event('visibilitychange'));
`);

它首先覆盖 window.hidden让它返回 false .然后,它触发 visibilitychange在页面已经隐藏的情况下通知文档的事件。

或者在创建文档后立即覆盖 API:

await page.evaluateOnNewDocument(`
    Object.defineProperty(window.document,'hidden',{get:function(){return false;},configurable:true});
    Object.defineProperty(window.document,'visibilityState',{get:function(){return 'visible';},configurable:true});
`);

关于selenium - headless 谷歌浏览器 : How to prevent sites to know whether their window is focused or not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772369/

相关文章:

python - WebDriverWait on javascript 值

javascript - 如何从HTML代码中检测文本

Javascript:修改代码以将元素添加到数组/列表

c# - 如何通过Selenium和Webdriver提高执行速度

javascript - 使用 Selenium Driver + PhantomJS 注入(inject) JavaScript 脚本并在 Python 中正确处理重定向

selenium - Protractor 错误 - 无法启动 WebDriver session

java - 如何使用Maven/testng将参数发送给方法?

node.js - Node.js puppeteer-无法获取所需的值(td:nth-​​child(n)

node.js - puppeteer 无法安装 : ERROR: Failed to set up Chromium r782078! 设置 "PUPPETEER_SKIP_DOWNLOAD"环境变量以跳过下载

javascript - 检查网站是否响应Puppeteer