2013-08-19 41 views
16

当我尝试放弃this site与Phantomjs,默认情况下,Phantomjs发送以下标题到服务器:假装火狐,而不是Phantom.js

"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的使用值:

'name': 'User-Agent', 
'value': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20120815 Firefox/16.0' 

在我应该放什么Phantomjs的一部分,这个属性?我应该在哪里插入它们 - 在page.open或内部page.evaluate,或在它的顶部?

回答

20

其实,在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代替。

+0

谢谢了很多,在jQuery> sizzle之后很难用'getElementsByClassName'来玩 – khex

+2

@khaljava哦,但是你可以在幻影之下使用jquery,我只是没有那么简单。检查更新的答案。 –

+1

即使您设置了标题,某些网站也有办法检测PhantomJS,但它们会返回错误或空白屏幕。如果我在Chrome中打开它们,一切都很好。我想知道有没有办法来处理它 – Toolkit