Facebook 是否知道我正在使用 PhantomJS 抓取它,它可以更改其网站来对抗我吗?

Does Facebook know I'm scraping it with PhantomJS and can it change its website to counter me?

所以,也许我偏执了。

我正在为一个使用 PhantomJS 的爱好项目抓取我的 Facebook 时间线。基本上,我编写了一个程序,通过在 phantom 的 page.evaluate 块内使用 XPATH 查询文本 Sponsored 的页面来查找我的所有广告。文本显示为 html a 个元素的 innerHTML。

这几天一切正常,它发现了大量广告。

然后它停止返回任何结果。

当我手动登录 Facebook 再次检查元素时,我发现 Sponsored 这个词现在出现在页面上的 ::after 伪类元素中 css 属性 content: sponsored。这意味着对文本的 XPATH 查询不再产生任何结果。不是开玩笑,Facebook 似乎在被抓取几天后改变了他们呈现这个词的方式。

偏执狂。我告诉你了。

因此,我向社区 Javascript、Web-Scraping 和 PhantomJS 开发人员提出了这个问题。到底他妈发生了什么。 Facebook 可以知道我的 PhantomJS 程序在 page.evaluate 块内做什么吗?

如果可以,怎么做?例如,我的幻象命令会出现在页面中嵌入的键盘记录程序中吗?

你有哪些理论?

即使用户代理被欺骗,也完全有可能检测到 PhantomJS。 它与其他浏览器有很多不同之处,其中包括:

  • headers
  • 顺序错误
  • 缺少媒体插件和最新的 JS 功能
  • PhantomJS-specific 方法,例如 window.callPhantom
  • 堆栈跟踪中的 PhantomJS 名称

和许多其他人。

有关详细信息,请参阅这篇优秀的文章和链接中的演示文稿:https://blog.shapesecurity.com/2015/01/22/detecting-phantomjs-based-visitors/

也许 puppeteer 更适合您的需求,因为它基于真正的 cutting-edge Chromium 浏览器。