2014-09-15 2 views
1

사이트의 HTML 콘텐츠를 얻는 방법으로 HTTPBuilder을 사용했습니다. 예를 들어,이 내가 사용했던 방법입니다 그러나 지금은 자바 스크립트가로드에서 실행되는 사이트에서 데이터를 취하려고하고있어, 지금이 정적 HTML 사이트에 대해 잘 근무하고있다HTTPBuilder 자바 스크립트 실행 후 가져 오기

def http = new HTTPBuilder(url) 

def root = http.get([:]) 

// Really just the standard approach. 

을하는 페이지를 채 웁니다. 예 : this page.

내 질문에, Grails/Groovy는 HTML 콘텐츠를 반환하기 전에 모든 자바 스크립트가 실행될 때까지 기다리는 기본 방법이 있습니다. 원주민이 아닌 경우 제 3 자입니까?

연구는 이미 내가 브라우저를 조롱하려고 시도 라이브러리를 살펴 했어

  • 을 시도했다. 라이브러리에서 자바 스크립트를 실행하고 결과 만 반환하면 원하는 동작을 모방 할 수 있다고 생각했습니다. 이에 대한 연구는 다소 제한적이었습니다. 발견 한 라이브러리는 사용자가 User-Agent과 같은 것을 제어 할 수있게 해줍니다.
+0

HtmlUnit/Selenium 시도해 볼 수 있습니다. 사실 나는이 테스트를 위해 사용하고 있지만 Javascript를 지원합니다. – wwarlock

답변

1

사용중인 방법은 서버에서 원시 HTML 콘텐츠 만 가져옵니다. 따라서 코드를 다운로드하거나 실행할 필요가 없습니다. Selenium이 작동 할 수도 있지만 (Geb, 주위의 Groovy 래퍼) getPageSource method은 JavaScript 이후의 HTML 내용을 가져 오는 것이 드라이버에 달려 있다고 말합니다. 드라이버 중 하나 (chrome, firefox 등)가 JavaScript 결과를 반환하는 경우가 있습니다. 그래도 문제가 해결되지 않으면 PhantomJS (blog post on what you want)를 사용해보십시오.

+0

당신은 실제로 여기에 있습니다. 오히려 서버 측에서 이것을 유지하는 것이 일부 프론트 엔드 Javascript를 통해 라우트해야합니다. * Geb *에 맞는 드라이버를 어떻게 지정해야합니까? – christopher

+0

서버에서이 작업을 실행하는 경우 HTMLUnit 또는 PhantomJS를 모두 확인하십시오. PhantomJS는 기본적으로 헤드리스 크롬 (V8 + 웹킷)입니다. HTMLUnit (http://htmlunit.sourceforge.net/)은 전적으로 Java이지만 사이트와 "호환"되지는 않습니다. 다른 Geb 드라이버는 실제로 GUI 브라우저 인스턴스를 실행하고 조작합니다. 나는 Java에서 모두 머물기 위해 HTMLUnit을 먼저 시도 할 것입니다. 만약 작동하지 않는다면 PhantomJS 드라이버와 getPageSource로 Geb를 시도 할 것입니다. 그 결과가 DOM 후에 결과를 반환하지 않는다면 스크립트를 사용하여 phantomjs 명령 행으로 이동하여 page.content를 인쇄하려고합니다. –

+0

이 제안을 살펴보고 다시 생각해 보겠습니다. 고마워! – christopher