隐藏webdriver

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')
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')

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值