2017-11-15 18 views
0

PHP에서 phantomjs와 함께 casperjs를 사용하여 링크를 추출하기 전에 웹 페이지를 렌더링합니다.이 방법으로 일반적으로 자바 스크립트로 작성된 모든 링크가 나오고 있습니다. 아니이 웹 사이트에 (.) centralcanadaclassics COM 여기Phantomjs/CasperJs는 페이지를 렌더링하지 못하도록 링크를 추출 할 수 있습니다.

CasperJS에 대한 JS입니다 내가 사용하고 있습니다 :

var xpath = require('casper').selectXPath; 
var casper = require('casper').create({ 
    pageSettings: { 
    loadImages: false, 
    webSecurityEnabled: false 
    }, 
    verbose: true, 
    logLevel: 'debug', 
    colorizerType: 'Dummy' 
}); 

casper.userAgent('casper'); 
casper.start().then(function() { 
    this.open('http://www.centralcanadaclassics.com', { 
     headers: { 
      'Accept': 'text/html' 
     } 
    }); 
}); 
casper.then(function() { 
    this.echo('[CURRENT_URL]' + this.getCurrentUrl()); 
    this.echo('[CURRENT_TITLE]' + this.getTitle()); 
    this.echo('[CURRENT_PAGE_CONTENT]' + 
    this.getPageContent().replace(new RegExp('\r?\n','g'), '')); 
    this.echo('[CURRENT_HTML]' + this.getHTML().replace(new RegExp('\r? \n','g'), '')); 
    this.echo('[CURRENT_HEADERS]' + JSON.stringify(this.currentResponse.headers)); 
    this.echo('[CURRENT_STATUS]' + this.currentResponse.status); 
    this.echo('[CURRENT_STATUS_TEXT]' + this.currentResponse.statusText); 
    this.echo('[CURRENT_COOKIES]' + JSON.stringify(phantom.cookies)); 
}); 
casper.run(); 

그래서 마지막에 모든 내용이 해당 페이지를 렌더링 나던, 동일하게 유지됩니다. 이유를 설명해주십시오.

+0

그럼, 해당 페이지의 모든 링크를 추출 하시겠습니까? 그리고 당신은 캐스퍼의 출력에서 ​​링크를 볼 수없는 이유가 궁금합니다. 그러나 일반 브라우저에서 볼 수 있습니다. –

답변

0

CasperJS는 비동기입니다. 데이터를 페이지가 열릴 때 바로 버릴 수 있습니다. 그래서 여기에서 사지에 서 말하고있는 그대로 페이지를 열고 페이지를 렌더링하는 동안 (즉, 이전에 완료) 콘텐츠를 사용해보십시오.

페이지 내용의 JS 렌더링 (동적)이있는 경우 하드 코딩 된 지연 (매우 취약) 또는 일반적으로 렌더링 된 요소를 식별하고 표시 될 때까지 대기하도록 CapserJS에 알려야합니다 그것은 어떤 종류의 링크 사냥을하기 전에.

다음은 'getLinks()'를 호출 할 자체 링크 구문 분석보기를 사용하여 수행 할 수있는 작업의 예입니다. 당신이 그것을 렌더링되기 전에 컨텐츠를 사용하려는 생각이

casper.wait(1000, function() { 
    casper.then(function() { 
     this.getLinks(); // this is your link hunting function 
    }); 
}); 

같은

// open the page 
casper.thenOpen(url).then(function() { 
    if (this.exists('#some-id')) { 
     this.getLinks(); // this is your link hunting function 
    } 
}); 

또는 뭔가.