【问题标题】:Puppeteer Delete Navigator.WebdriverPuppeteer 删除 Navigator.Webdriver
【发布时间】:2019-05-24 20:30:33
【问题描述】:

我正在使用 puppeteer 进行抓取。 我可以通过 navigator.webdriver property= false 但我需要完全删除该道具。

https://bot.sannysoft.com/

我尝试将 false 传递给 navigator.webdriver。这招可以传 https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html

但在https://bot.sannysoft.com/ 不能。

这是网页测试机器人。该测试正在寻找导航器对象中是否有任何“webdriver”道具。不在乎它是真是假。 我需要从浏览器中删除这个 webdriver 道具。

【问题讨论】:

标签: selenium automation puppeteer browser-automation


【解决方案1】:

试试这个:

const newProto = navigator.__proto__;
delete newProto.webdriver;
navigator.__proto__ = newProto;

【讨论】:

  • 为什么不定义为假的删除呢?
  • @Matrix 因为在普通浏览器中没有定义。
  • 这里例如:page.evaluateOnNewDocument(pageFunction[, ...args]);你的代码应该在“pageFunction”内
【解决方案2】:

由于无法发表评论,我会留下答案:

我有同样的问题,@Nodarius 的回答对我有用。 由于您不接受,我认为您的问题仍然存在。

这可能是因为,即使您在其中运行,您也需要在页面加载之前(或在网站访问变量之前)运行该代码。

我使用代理 (https://mitmproxy.org/) 实现了这一点,该代理在页面加载之前加载脚本。

希望对你有帮助。

【讨论】:

    【解决方案3】:

    这行得通

    await page.evaluateOnNewDocument(() => {
      window.navigator = {}
    })
    

    【讨论】:

    • 会尽快试试这个
    • pastebin.com/DQCvyuHM 这就是我正在做的事情,除了 WebGL Vendor 之外,一切都正常工作,它在 chrome 上通常不能正常工作
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2021-01-21
    • 2020-03-27
    • 2021-06-29
    • 2020-04-29
    • 2021-07-23
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多