Phantomjs / Casperjs 现在不工作网站检测机器人
Phantomjs / Casperjs now does not work website detects bot
我的脚本已经停止工作 2 天了。如果我从任何浏览器(Chrome、Mozilla 等...)手动执行工作,没问题。我觉得问题应该出在phantojs的headers。你怎么能在phantomjs中把headers模拟成普通浏览器呢?下面这些行是当我使用 pantomjs / casperjs
访问时网站向我显示的内容
请原谅我们的打扰...
当您浏览浏览器时,我们认为您是一个机器人。发生这种情况的原因有几个:
您是高级用户,以 super-human 的速度浏览此网站。
您已在网络浏览器中禁用 JavaScript。
third-party 浏览器插件,例如 Ghostery 或 NoScript,正在阻止 JavaScript 从 运行。这篇支持文章中提供了更多信息。
完成下面的验证码后,您将立即重新获得对
的访问权限
在我的脚本中我有这样的配置:
var casper = require("casper").create ({
engine: 'phantomjs',
exitOnError: false,
ignoreSslErrors: true,
waitTimeout: 5000,
stepTimeout: 5000,
verbose: true,
pageSettings: {
webSecurityEnabled: false,
javascriptEnabled: true,
loadImages: true,
loadPlugins: true,
localToRemoteUrlAccessEnabled: true,
userAgent: 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36',
XSSAuditingEnabled: false,
logLevel: 'debug'
},
onWaitTimeout: function() {
// this.echo('** Wait-TimeOut **');
},
onStepTimeout: function() {
//this.echo('** Step-TimeOut **');
}
});
首先要做的事情是:如果第三方站点花费大量精力来检测机器人程序,他们可能不希望您使用机器人程序,因此您可能应该遵守。
关于检测 PhantomJS 的方法:有很多,从错误的请求头顺序,缺少媒体插件到特定方法,甚至在错误堆栈跟踪中泄露 phantomjs。
这里有一个关于这个问题的精彩介绍:Detecting headless browsers。
我知道只提供指向远程页面的链接是不受欢迎的,但这里有太多不同的点无法提及,它们都应该在反检测工作中得到解决。
额外建议:如果您对 PhantomJS 基础设施的投资不是太多,请看看 puppeteer。
总体上可以提供帮助的事情:
- Headers应该和常见的浏览器差不多,包括:
- User-Agent : 使用最近的一个(见 https://developers.whatismybrowser.com/useragents/explore/), or better, use a random recent one if you make multiple requests (see https://github.com/skratchdot/random-useragent)
- Accept-Language :类似于“en,en-US;q=0,5”(适应为您的语言)
- Accept:一个标准的会像“text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"
- 导航:
- 如果您发出多个请求,请在它们之间放置一个随机超时
- 如果您打开 links 在页面中找到,请相应地设置 Referer header
- 或者更好,模拟鼠标activity移动,点击跟随link
- 图像 应启用
- Javascript 应该启用
- 检查客户端是否设置了“navigator.plugins”和“navigator.language”javascript 页面上下文
- 检查您使用的客户端是否没有注入明显的 javascript 变量(如 _cdc、__nightmare...)
- 使用代理
我的脚本已经停止工作 2 天了。如果我从任何浏览器(Chrome、Mozilla 等...)手动执行工作,没问题。我觉得问题应该出在phantojs的headers。你怎么能在phantomjs中把headers模拟成普通浏览器呢?下面这些行是当我使用 pantomjs / casperjs
访问时网站向我显示的内容请原谅我们的打扰...
当您浏览浏览器时,我们认为您是一个机器人。发生这种情况的原因有几个:
您是高级用户,以 super-human 的速度浏览此网站。 您已在网络浏览器中禁用 JavaScript。 third-party 浏览器插件,例如 Ghostery 或 NoScript,正在阻止 JavaScript 从 运行。这篇支持文章中提供了更多信息。
完成下面的验证码后,您将立即重新获得对
的访问权限在我的脚本中我有这样的配置:
var casper = require("casper").create ({
engine: 'phantomjs',
exitOnError: false,
ignoreSslErrors: true,
waitTimeout: 5000,
stepTimeout: 5000,
verbose: true,
pageSettings: {
webSecurityEnabled: false,
javascriptEnabled: true,
loadImages: true,
loadPlugins: true,
localToRemoteUrlAccessEnabled: true,
userAgent: 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36',
XSSAuditingEnabled: false,
logLevel: 'debug'
},
onWaitTimeout: function() {
// this.echo('** Wait-TimeOut **');
},
onStepTimeout: function() {
//this.echo('** Step-TimeOut **');
}
});
首先要做的事情是:如果第三方站点花费大量精力来检测机器人程序,他们可能不希望您使用机器人程序,因此您可能应该遵守。
关于检测 PhantomJS 的方法:有很多,从错误的请求头顺序,缺少媒体插件到特定方法,甚至在错误堆栈跟踪中泄露 phantomjs。
这里有一个关于这个问题的精彩介绍:Detecting headless browsers。
我知道只提供指向远程页面的链接是不受欢迎的,但这里有太多不同的点无法提及,它们都应该在反检测工作中得到解决。
额外建议:如果您对 PhantomJS 基础设施的投资不是太多,请看看 puppeteer。
总体上可以提供帮助的事情:
- Headers应该和常见的浏览器差不多,包括:
- User-Agent : 使用最近的一个(见 https://developers.whatismybrowser.com/useragents/explore/), or better, use a random recent one if you make multiple requests (see https://github.com/skratchdot/random-useragent)
- Accept-Language :类似于“en,en-US;q=0,5”(适应为您的语言)
- Accept:一个标准的会像“text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"
- 导航:
- 如果您发出多个请求,请在它们之间放置一个随机超时
- 如果您打开 links 在页面中找到,请相应地设置 Referer header
- 或者更好,模拟鼠标activity移动,点击跟随link
- 图像 应启用
- Javascript 应该启用
- 检查客户端是否设置了“navigator.plugins”和“navigator.language”javascript 页面上下文
- 检查您使用的客户端是否没有注入明显的 javascript 变量(如 _cdc、__nightmare...)
- 使用代理