2013-05-14 2 views
4

open-uri를 사용하여 웹 사이트의 html 페이지를 가져 오려고합니다. 그러나 문제는 웹 사이트가 올바른 코드를 제대로 갖기 위해 몇 초 정도 기다려야한다는 것입니다. 내가 지금있는 것은 : 지금이 권리를 실행하면Ruby Open-URI with Dynamic Website

require 'open-uri' 

html = open('http://hiddencode.me/dribbbucket/embed.html?key=MY_API_KEY&bucket=56024-Glassboard&delay=5000') 
response = html.read 
puts response 

, 내가 얻을 :

<div id="slam-dunk"> 
    <div id="loading">Loading..</div> 
</div> 

그러나 사이트가 제대로 올바른 응답을 얻기 위해 개방하기 전에 먼저로드해야합니다. 어떤 아이디어를 루비에서 어떻게 할 수 있습니까? 루비가 당신의 전문 지식이 아니면 다른 언어로 솔루션을 사용할 수도 있습니다!

+5

헤드리스 브라우저가 필요하거나 JavaScript를 실행할 수있는 서머 링이 필요합니다. 다양한 옵션이 있습니다. –

+1

AJAX에서 사용하는 URL을 열어야합니다. – DmitryR

답변

3

예를 들어 최근에 비슷한 작업을 수행하기 위해 watir-webdriver을 사용했습니다. 자바 스크립트 실행 후 DOM을 쿼리하고 원하는 것을 꺼낼 수 있습니다. 머리가 좋지 않다면, 제 경우에는 머리없는 보석을 사용했습니다.

'open-uri'를 고수하고 싶다면 httpfox과 같은 것을 사용하여 javascript가 어떤 ajax 요청을하는지 시청해야합니다. 다양한 도구를 사용하여이 작업을 수행 할 수 있습니다. 하지만 당신은 URL을 방문하기 전에,이 경우, httpfox를 시작합니다. 긁어 모으는 정보가 나타날 때까지 기다린 다음 httpfox를 중지하고 각 요청을 검토하여 귀하가 긁어 모으고있는 것과 관련된 것들을 확인하십시오. 적절한 요청을 확인하면 open-uri를 통해이를 사용할 수 있습니다. 가장 단순한 반면, 웹 애플리케이션은 서버와 상호 작용하고 dom을 조작하는 방식이 매우 다양하므로이 솔루션은 보장되지 않습니다.

+0

감사합니다. 내가 이것을했을 때, 나는 정말로 그 일을 성취하기 위해 watir을 사용하여 끝냈다. –