当前位置:   article > 正文

隐藏webdriver_用cmd webdriver.exe 不显示配置

用cmd webdriver.exe 不显示配置

webdriver检测这个问题最明显的就是淘宝登录,当我们使用不加任何隐藏处理的seleniumpyppeteer模拟登陆时,淘宝登录时的人机验证将会返回一个错误信息,其实很多其他网站的反爬机制也会检测这一条。所以我们使用seleniumpyppeteer这种库时就需要做webdriver的隐藏处理。

网上大多数处理这种问题就是使用js注入,但这种处理方法明显就是掩耳盗铃,认真思考后就会知道这种方案不可行,因为这些js注入都是在打开网页后进行的,网页早已检测到你是通过webdriver进行的网页访问。所以我们隐藏webdriver的方法应该是在打开网页之前,生成浏览器对象后。之前的方案可以通过开启Chrome浏览器的实验性功能参数 excludeSwitches,但在Chrome浏览器的安全更新后,这个方法失效了,目前可行方法是调用Chrome浏览器CDP的Page.addScriptToEvaluateOnNewDocument命令,通过这个命令可以让Chrome浏览器打开页面时先执行我们所给的js脚本。具体的讲解可以查阅 这篇文章seleniumpyppeteer的使用代码如下:

from selenium.webdriver import Chrome

driver = Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
driver.get('https://www.baidu.com')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, userDataDir='F:\\python\\userdata', args=['--disable-infobars'])
    page = await browser.newPage()
    await page.evaluateOnNewDocument('''() => {
            Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
            })
            }
        ''')

    await page.goto('https://www.baidu.com')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

当然也可以通过编写Chrome浏览器的插件来达到隐藏webdriver的目的,但是相对于这种方法来说略显麻烦,不过优点在于会更稳定一些,不会受到Chrome更新的影响。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/626524
推荐阅读
相关标签
  

闽ICP备14008679号