• 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))中还未生效。

  • 相关阅读:
    scala中 object 和 class的区别
    scala中的apply方法与unapply方法
    Scala中的样例类详解
    Scala 中下划线的一些魔法
    Hadoop搭建配置参数调优
    设置ESX/ESXi中(Linux)虚拟机从U盘引导启动
    CentOS下编译安装Busybox
    LRU算法简单实现
    Spark 3.0 动态分区裁剪(Dynamic Partition Pruning)
    Hive中的数据分桶以及使用场景
  • 原文地址:https://www.cnblogs.com/xzysaber/p/9719493.html
Copyright © 2020-2023  润新知