首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有新的技术来检测webdriver控制的chrome?

有没有新的技术来检测webdriver控制的chrome?
EN

Stack Overflow用户
提问于 2020-02-18 15:04:08
回答 1查看 189关注 0票数 2

我正在使用一个基于网络驱动程序的爬虫从一个中文新闻网站(Toutiao)收集信息。自2020年以来。16,我发现该站点不会向webdriver程序控制的chrome响应任何数据,但是chrome手动启动工作正常(如下图所示)。

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

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

代码语言:javascript
复制
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
    })
  """
})

Summery,删除相同的IP、用户代理和navigator.webdriver。为什么网站仍然检测到我的chrome是由webdriver控制的?

更新

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

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

更新2

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

EN

回答 1

Stack Overflow用户

发布于 2020-06-23 04:04:46

我很幸运地使用了下面的木偶操纵者脚本(不完全是无用的,但希望能有用)

代码语言:javascript
复制
'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()
})()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60275464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档