跳到主要内容

Web机器人入门

· 阅读需 5 分钟

本文介绍了 Web 机器人(Web bot)是什么?是做什么的?有哪些类型?

什么是 Web 机器人?

定义

能够在网络运行自动化任务的程序。

作用

提高吞吐量,降低成本。

使用场景

  • 自动化测试
  • 网络欺诈
  • 证书填充(credential stuffing)
  • 爬虫

Web 机器人分类

可以通过使用的技术,将 Web 机器人分为三类:

  • 使用 HTTP 框架
  • 使用真正的浏览器
  • 使用无头浏览器

简单的 HTTP 请求库

如使用 Python 的urlllib或是 Node.js 的http模块。

优点:占用 CPU 和内存少。

缺点:无法加载动态内容,或单页面应用(SPA),不能执行 JavaScript 代码,通常需要借助别的库来解析 HTML,如:Beautiful SoupCheerio

使用了 Selenium/puppeter 的真正的浏览器

Selenium 和 Puppeteer 是浏览器自动化框架。它们能够运行自动化程序,例如加载页面、移动鼠标或输入文本等。

Puppeteer 主要通过 Node.js 来控制 Chrome 和 Headless Chrome。

Selenium 可以控制常见的浏览器,如 Firefox、 Chrome 和 Safari,并且能够使用不同的编程语言(Node.js、Python 和 Java)。

优点:能够执行 JavaScript,并且使用真正的浏览器。

缺点:占用较多的 CPU 和内存,不能直接在服务器上使用,因为通常需要显示器。

无头(Headless)浏览器

无头浏览器是没有图形界面的浏览器。最早流行的无头浏览器之一是 PhantomJS(已不再维护,最后一个稳定版本是 2016 年发布的)。

2017 年谷歌发布了 Headless Chrome,几乎支持所有普通 Chrome 的功能。

优点:能执行 JavaScript,并且占用较少的 CPU 和内存资源。

识别 Web 机器人

行为检测(Behavioral detection)

该方法通过检测用户的行为,如鼠标移动、浏览速度等来检测是不是真人。

服务端特征

  • Session 期间所浏览的页面数
  • 总请求数
  • 浏览页面的顺序,机器人往往有某种模式,而人类会更加混乱。
  • 浏览两个连续页面的平均时间。
  • 页面加载的资源类型,机器人可能会因为节省带宽而屏蔽 CSS、图片、广告等。

客户端特征

  • 鼠标移动轨迹
  • 鼠标点击
  • 滚动
  • 按键,连续按键的时间间隔

基于指纹识别的检测(Fingerprinting-based detection)

指纹识别通过设备或浏览器相关的信息进行检测。既可以进行身份验证,也可以检测机器人。

该方法的思路:收集设备、操作系统、浏览器信息;然后对手机代码进行混淆和加密,否则会被机器人开发人员发现检测原理。

浏览器指纹识别(Browser fingerprinting)

  • PhantomJS
    • window.callPhantom
    • window._phantom
    • window.phantom
  • Nightmare
    • window.__nightmare
  • webdriver
    • navigator.webdriver
  • Selenium
    • document.__selenium_unwrapped
    • document.__webdriver_evaluate
    • document.__driver_evaluate

浏览器一致性(Browser consistency)

用来验证 UA 是否造假

eval.toString().length
// Chrome返回33
// Firefox、Safari返回37
// IE返回39

操作系统一致性(OS consistency)

UA 和 navigator.platform 的是否值一致

  • Linux -> Linux i686, Linux x86_64
  • Windows -> Win32, Win64
  • iOS -> iPhone, iPad
  • Android -> Linux armv71, Linux i686
  • macOS -> MacIntel
  • FreeBSD -> FreeBSD amd64, FreeBSD i386

不一致行为(Inconsistent feature behavior)

通过权限检测 Headless Chrome

navigator.permissions
.query({ name: 'notifications' })
.then(function (permissionStatus) {
if (
Notification.permission === 'denied' &&
permissionStatus.state === 'prompt'
) {
console.log('This is Chrome headless')
} else {
console.log('This is not Chrome headless')
}
})

Red pills

Red pills allow programs to detect if their execution environment is a CPU emulator or a virtual machine.

CAPTCHAs

Completely Automated Public Turing test to tell Computers and Humans Apart

CAPTCHAs 利用图灵测试,比如图像和音频识别来区分机器人和人类。

参考资料