• puppeteer 的PDD反爬经历


    使用puppeteer 爬取PDD数据时出现要求登录,以前是没有这问题的。

    尝试多种方式如果:

    • 变更UA
    • 变更代理IP
    • 变更Chromium版本(当然最终就是该问题的原因,但是因为版本跨度太大没有测试出来)

    最后查找浏览器判断是否在自动化工具控制下的方法,结果查询到文章,得知了新版Chrome有navigator.webdriver属性。

    如果是在自动化工具控制下,在控制台中输出navigator.webdriver,可以看到true。

    如果直接打开浏览器,在控制台出现的则是undefined,注意这里不是navigator.webdriver值为undefined,而是navigator没有webdriver属性。

    该属性值不能通过赋值进行覆盖,但我们可以通过Object.defineProperty来覆盖:

    Object.defineProperty(navigator,'webdriver',{
        get: ()=>false
    })

    但是如果是通过in或者hasOwnProperty来判断,

    'webdriver' in navigator
    //or
    navigator.hasOwnProperty('webdriver')

    覆盖webdriver为false就没用了。暂时不知道如何处理这种情况,还没看到deleteProperty这样的方法,当然delete也是没有用的。

    翻看PDD前端源码发现还对phantomjs等进行了检测。

    有兴趣的可以看看Chrome添加该属性的缘由:https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/6GysDZCWwB8/rXbGoRohBgAJ

    可以根据ChromeStatus得知该属性添加的版本为63,但这属性需要到在puppeteer v0.12.0(对应chromium版本为64.0.3240.0 (r508693))中才开始有效,在v0.11.0(63.0.3205.0 (r499413))中还未生效。

  • 相关阅读:
    LYDSY模拟赛day3 序列
    LYDSY模拟赛day3 涂色游戏
    LYDSY模拟赛day3 平均数
    hdu1757 A Simple Math Problem
    清北国庆day1 (脑)残
    poj3070 Fibonacci
    uva10870 递推关系Recurrences
    湖南附中模拟day1 瞭望塔
    湖南附中模拟day1 收银员
    湖南附中模拟day1 金坷垃
  • 原文地址:https://www.cnblogs.com/xzysaber/p/9719493.html
Copyright © 2020-2023  润新知