当我尝试使用Phantomjs废弃this site时,默认情况下,Phantomjs会将以下标头发送到服务器:
"name":"User-Agent",
"value":"Mozilla/5.0 (Unknown; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34"}
我得到status 405 "Not Allowed"
回复。
我在 Phantomjs API参考中读到,为了模仿来自其他浏览器的请求,我应该更改我的User-Agent值。在维基百科上,我找到了我应该用来假装在 Ubuntu 下的 Firefox 的价值:
'name': 'User-Agent',
'value': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20120815 Firefox/16.0'
我应该在Phantomjs的哪个部分放置这些属性?我应该在哪里插入 - 在 page.open 内,或在 page.evaluate 内,或在其顶部?
答案 0 :(得分:21)
实际上,是page.settings
。在open
之前完成。
以下是针对您链接的网页使用它的示例:
var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36';
page.open('http://www.oddsportal.com/baseball/usa/mlb/results/page/', function() {
window.setTimeout(function() {
var output = page.evaluate(function() {
return document.getElementById('tournamentTable')
.getElementsByClassName('deactivate')[0]
.getElementsByTagName('a')[0]
.textContent;
});
console.log(output);
}, 1000);
});
此示例将刮取表格第一行中的匹配名称。 (在这个精确的时刻是“San Francisco Giants - Boston Red Sox
”)
关于你的评论,实际上你可以在phantomjs下使用jquery!检查此示例:
var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36';
page.open('http://www.oddsportal.com/baseball/usa/mlb/results/page/', function() {
window.setTimeout(function() {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js", function() {
var output = page.evaluate(function () {
return jQuery('#tournamentTable .deactivate:first a:first').text();
});
console.log(output);
});
}, 1000);
});
顺便说一句,等待,而不是我在此示例中使用的window.setTimeout
,我建议您改为使用waitfor.js。