berstend / puppeteer-extra

💯 Teach puppeteer new tricks through plugins.
https://extra.community
MIT License
6.41k stars 739 forks source link

Webdriver can be detected #866

Open marcusdiy opened 8 months ago

marcusdiy commented 8 months ago

There is a problem, the webdriver can be detected as following: let usesWebdriver = navigator.__proto__.webdriver and will evaluate to true seems like adding delete navigator.__proto__.webdriver; works to hide this fact

For example in: evasions\navigator.webdriver\index.js

  async onPageCreated(page) {
    await page.evaluateOnNewDocument(() => {
      if (navigator.webdriver === false) {
        // Post Chrome 89.0.4339.0 and already good
        delete navigator.__proto__.webdriver;
      } else if (navigator.webdriver === undefined) {
        // Pre Chrome 89.0.4339.0 and already good
      } else {
        // Pre Chrome 88.0.4291.0 and needs patching
        delete Object.getPrototypeOf(navigator).webdriver
      }
    })
  }
toleblanc commented 8 months ago

@marcusdiy

I cannot get this to work.

> let usesWebdriver = navigator.__proto__.webdriver
< TypeError: The Navigator.webdriver getter can only be used on instances of Navigator

> usesWebdriver = Navigator.__proto__.webdriver
< ReferenceError: Cannot access uninitialized variable.

Can you help? Thanks