【问题标题】:Is there a noval technology to detect our chrome controlled by webdriver?是否有一种新技术可以检测由 webdriver 控制的 chrome?
【发布时间】:2020-02-18 07:04:07
【问题描述】:

我正在使用基于 Webdriver 的爬虫从中国新闻网站 (Toutiao) 收集信息。自 2020 年以来美联储。 16、我发现网站没有响应webdriver程序控制的chrome的任何数据,但是chrome手动启动正常(如下图所示)。

左边是手动启动的chrome,右边是webdriver控制的chrome。

两个 chrome 使用同一个 IP,我为这两个 chrome 定义了相同的用户代理。此外,我使用以下代码(来自DebanjanB)删除“navigator.webdriver”(如上图所示,代码成功):

options = webdriver.ChromeOptions() 
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'./chromedriver')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})

总结,同一个IP,User-agent,和“navigator.webdriver”都去掉了。为什么网站仍然检测到我的 chrome 是由 webdriver 控制的?

更新中

网站通过访问 url 获取内容。如果我从手动启动 chrome 复制并访问 url(带有加密参数)到 webdriver 控制的 chrome,服务器将向 webdriver 发送正确的信息。

因此,网站在生成 url 及其加密参数时肯定会检测到 webdriver。

更新 2

讨论“Can a website detect when you are using selenium with chromedriver?”并没有解决问题,请注意!

【问题讨论】:

  • 我使用的是 Chrome 80 和相应的 webdriver。我已阅读该线程,除了重新编译 webdriver 以更改参数名称('cdc'?)之外,我已经尝试了所有方法。我认为该方法基于旧版本的 chrome。
  • 除了“navigator.webdriver”,我发现这两个chrome的“navigator.plugins”的值是一样的
  • 在 Ubuntu、Win 10 和 Mac 中使用不同版本的 chrome 和 chromedriver 重复出现该问题
  • 不幸的是,WebDriver 控制的浏览器和普通浏览器在一些可能可以检测到的方面确实存在差异。 Selenium/WebDriver 对制造 100% 不可检测的机器人不感兴趣,因为这不是它们存在的原因。我过去使用的一种方法是通过远程调试为浏览器的开发人员工具(调试器)编写脚本。这是无法检测到的,但它不如 Selenium。
  • 谢谢。我只想知道该站点如何检测 webdriver?或者Puppeteer或者cdp4j等其他工具可以用同样的方法检测吗?

标签: java python google-chrome selenium-webdriver


【解决方案1】:

我对以下 puppeteer 脚本很幸运(不完全是无头的,但希望可以使用)

'use strict'
/* Get puppeteer api */
const puppeteer = require('puppeteer')
const { TimeoutError } = require('puppeteer/Errors')
const ElementHandle = require('puppeteer/lib/JSHandle').ElementHandle
;(async () => {
    console.log('start')
    const browser = await puppeteer.launch({
        headless: false,
        defaultViewport: null,
        //product: "firefox",
        //userDataDir: '/Users/bartic/Library/Application Support/Chromium',
        ignoreHTTPSErrors: true,
        args: [
            '--disable-infobars',
            `--window-size=1900,1000`,
            `--window-position=100,0`,
        ],
        pipe: false,
        devtools: true
    })
    console.log('browser created')
    // Pass the Webdriver Test
    const page = await browser.newPage()
    await page.evaluateOnNewDocument(() => {
      delete navigator.__proto__.webdriver;
    });
    await page.goto('https://www.toutiao.com/')
    console.log('on page')
    await page.waitForNavigation()
})()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多