2014-12-05 2 views
0

나는 casperjs를 사용하여 Facebook의 메인 페이지를 긁어 모으려고합니다. casperjs에서 Google을 긁어 모으기 위해 예제 코드를 수정했습니다. class = fbxWelcomeBoxName을 사용하여 요소를 식별하고 링크를 검색합니다.Casperjs를 사용하여 Facebook을 긁을 때 아무 것도 얻지 마.

이 예제는 Google.com에서 잘 작동하지만 Facebook에서 스크랩하는 경우 작동하지 않는 것으로 보입니다. 나는 페이스 북이 고객 청중에 대해 근근이 살아가는 것을 금지하는 것에 대해 들었다. 그러나 내 근근이 살아가는 것은 그 일과 관련이 없습니다. 내가 놓친 게 있니? 미리 감사드립니다!

var links = []; 
var casper = require('casper').create(); 

function getLinks() { 
    var links = document.querySelectorAll('.fbxWelcomeBoxName'); 
    return Array.prototype.map.call(links, function(e) { 
     return e.getAttribute("href"); 
    }); 
} 

casper.userAgent('Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1'); 

casper.start('https://www.facebook.com', function() { 
    // search for 'casperjs' from facebook form 
    this.fill('form#login_form', { 
     email: '***your email***', 
     pass: '***your password***' 
    }, true); 
}); 

casper.then(function() { 
    // aggregate results 
    links = this.evaluate(getLinks); 
}); 


casper.run(function() { 
    // echo results in some pretty fashion 
    this.echo(links.length + ' links found:'); 
    this.echo(' - ' + links.join('\n - ')).exit(); 
}); 

결과 :

[email protected]:~/tests/casperjs$ casperjs --verbose --log-level=debug --ssl-protocol=any test11.js 
[info] [phantom] Starting... 
[info] [phantom] Running suite: 3 steps 
[debug] [phantom] opening url: https://www.facebook.com/, HTTP GET 
[debug] [phantom] Navigation requested: url=https://www.facebook.com/, type=Other, willNavigate=true, isMainFrame=true 
[debug] [phantom] url changed to "https://www.facebook.com/" 
[debug] [phantom] Successfully injected Casper client-side utilities 
[info] [phantom] Step anonymous 2/3 https://www.facebook.com/ (HTTP 200) 
[info] [remote] attempting to fetch form element from selector: 'form#login_form' 
[debug] [remote] Set "email" field value to [email protected] 
[debug] [remote] Set "pass" field value to ******** 
[info] [remote] submitting form to https://www.facebook.com/login.php?login_attempt=1, HTTP POST 
[info] [phantom] Step anonymous 2/3: done in 447ms. 
[debug] [phantom] Navigation requested: url=https://www.facebook.com/login.php?login_attempt=1, type=FormSubmitted, willNavigate=true, isMainFrame=true 
[debug] [phantom] Navigation requested: url=https://www.facebook.com/, type=FormSubmitted, willNavigate=true, isMainFrame=true 
[debug] [phantom] url changed to "https://www.facebook.com/" 
[debug] [phantom] Successfully injected Casper client-side utilities 
[info] [phantom] Step anonymous 3/3 https://www.facebook.com/ (HTTP 200) 
[info] [phantom] Step anonymous 3/3: done in 2265ms. 
[info] [phantom] Done 3 steps in 2284ms 
0 links found: 
- 

답변

0

PhantomJS는 400x300의 기본 viewportSize 있습니다. 당신이 뭔가 바탕 화면 같은 당신 start 전에 설정해야합니다 그래서 :

casper.viewportSize = {width: 1920, height: 1080}; 

를이 도움이되지 않으면, 당신은 그것을 긁어 전에 페이지에 표시하는 '.fbxWelcomeBoxName' 기다려야합니다

casper.waitForSelector('.fbxWelcomeBoxName', function(){ 
    links = this.evaluate(getLinks); 
}); 

그런데 getLinks을 가질 이유가 없습니다. casper.getElementsAttribute을 사용해야합니다.

links = casper.getElementsAttribute('.fbxWelcomeBoxName', 'href'); 
+0

답장을 보내 주셔서 감사합니다. 나는 당신의 세 가지 의견을 모두 시도했다. 그러나 요소를 검색 할 수없는 것 같습니다. [오류] [팬텀] 10000ms의 대기 제한 시간이 만료되었습니다. 대기 시간 제한 10000ms가 만료되었습니다. 페이스 북에서 팬텀이 긁어 모으지 않습니까? HTTP 요청에서 브라우저 정보를 'phantomjs'로 탐지하면 요청을 차단합니다. –