2009-03-25 2 views
2

RUBY를 사용하여 데이터를 표시하기 위해 gridview를 사용하는 웹 페이지 (asp.net에서 생성 된)를 스크랩합니다. 그리드의 1 페이지에 표시된 데이터를 성공적으로 읽을 수 있지만 모든 데이터를 읽는 그리드의 다음 페이지로 이동하는 방법을 파악할 수 없습니다.격자보기에 표시된 데이터를 검색하기 위해 ASP.NET 웹 페이지를 긁는 화면

문제 .. 페이지 번호 하이퍼 링크가없는 통상의 하이퍼 링크이다 (URL)와 대신 동일한 페이지에 게시 발생 스크립트 하이퍼있다

하이퍼 링크의 예이다 : -

<a href="javascript:__doPostBack('gvw_offices','Page$6')" style="color:Black;">6</a> 

답변

2

처리를 위해 이미 루비를 사용하고 있다면 브라우저 테스트 용으로 설계된 루비 라이브러리 인 Watir을 사용하는 것이 좋습니다. 우선, 그것은 당신에게 페이지의 DOM 요소에 훨씬 좋네요 인터페이스를 제공하며이 쉽게와 같은 클릭 링크합니다 :뿐만 아니라 테이블을 탐색하기위한

ie.link(:text, '6').click 

그리고, 물론 당신이 쉬운 방법을. 이 프로세스를 자동화하기에 충분히 쉽습니다.

1..total_number_of_pages.each do |next_page| 

    ie.link(:text, next_page).click 
    # table processing goes here 

end 

이 방법에는 장점과 단점이 있습니다.한 가지 사실은 실제로 브라우저 인스턴스를 실행하기 때문에 완전히 자동화 된 방식으로 빈번하게 백그라운드에서 실행해야하는 경우 이것이 최선의 방법이 아닐 수도 있습니다. 다른 한편, 브라우저 인스턴스를 시작하는 것이 좋으면, 그 모든 포스트 백 넌센스에 대해 걱정할 필요가 없으며 사용자 인 것처럼 링크를 클릭하면됩니다.

Watir과는 : http://wtr.rubyforge.org/

+0

나는 또한이 문제에 직면하고있다. 그러나 나는 스크랩 핑을 위해 PHP를 사용하고있다. 그래서 나는 무엇을 할 수 있는가 ..? –

2

실제 URL을 알아 내야합니다.

옵션 1a : 개발자가 지원하는 브라우저 (예 : 웹 개발 도구를 사용하여 Firefox)에서 페이지를 열고 소스를 살펴보고 _doPostBack이 정의되어 있는지 확인하십시오. 그것이 구축하고있는 URL을 찾아냅니다. 주 페이지 소스에 있지는 않지만 페이지가로드되는 소스에있을 수 있습니다.

옵션 1b : 동일하지만 루비가 있습니다. Net : HTTP를 사용하여 페이지를 가져 오는 경우 __doPostBack의 정의 (문자열, 루비의 grep 및 본문 태그와 같은 추가 파일을 요청할 수있는 본문)의 정의를 찾는 도구가 있습니다.

옵션 2 : 브라우저와 페이지 (예 : 로깅 프록시 사용) 사이의 트래픽을 모니터링하여 URL이 무엇인지 확인하십시오.

옵션 3 : 웹 페이지의 소유자에게 문의하십시오.

옵션 4 : 추측. 원본 URL이 "...? page = 1"또는 그 밖의 문자로 끝나는 경우처럼 소리가 나쁘지는 않지만 일반적으로 작동 가능성이 가장 낮습니다. (다른 질문에 대한 내 댓글에 응답)

편집 :

당신이 인터넷 사용하는 가정 : HTTP 라이브러리를, 당신은 단지 post, 예를 들어, 당신의 get을 대체하여 다시 게시 할 수 있습니다 대신 (danieltalsky의 대답에 응답) my_http.get(my_url)

편집의 my_http.post(my_url) : 당신을 위해 정말 좋은 솔루션을 (내가 그 생각을 가지고 있지 자신을 발로 해요),하지만 그 알고있을 수 있습니다 Watir과

당신은 manually fire the event해야 할 수도 있습니다 또는 당신이 원하는 것을 얻기 위해 다른 농구를 통해 이동하십시오. 특정 잡았다, 이와 같은 비동기 가져 오기와 함께 당신은 당신이 그것을 긁기 전에 전체 응답이 돌아 왔는지 확인해야합니다. 그건 당신이 직접 인라인 요청을 할 때 문제가되지 않습니다.

1

당신은 포스트 백을 수행해야합니다. 데이터는 POST 형식의 서버로 전달됩니다. 마커스 (Markus)는 파이어 버그 (IE) 8이나 파이어 러더 (Fiddler)에서 개발자 도구 (Tools)와 같은 것을 사용하여 트래픽을 감시한다고 말했다. 솔직히 말해서 이것은 부풀린 GridView를 사용하는 웹 양식이며 재미있는 모험을위한 것입니다. ;)

+0

Chris : - 답장을 보내 주셔서 감사합니다. 해당 웹 페이지에서 루비를 사용하여 포스트 백을 수행하려면 어떻게해야합니까? 그물에 몇 가지 도움이 될만한 몇 가지 예를 들어 보시겠습니까? – MOZILLA

0

자바 스크립트 실행이 수행하는 HTTP 요청을 파악하려면 조사가 필요합니다. 필자는 Mozilla 브라우저를 Firebug 플러그인과 함께 사용하고 "Live HTTP Headers"플러그인을 사용하여 어떤 일이 일어나고 있는지 확인합니다. 다음 페이지로 이동하기 위해 어떤 요청을해야할지 명확하게 알 수 있습니다. 쿠키 설정에주의를 기울여야합니다.

저는 근근이 살아가는 데 Mechanize을 사용하여 정말 성공적으로 성공했습니다. HTTP 통신, html 구문 분석 및 검색 (Nokogiri 사용), 리디렉션 및 쿠키 보유를 모두 포함합니다. 그러나 Javascript를 실행하는 방법을 알지 못하기 때문에 사용자가 직접 수행해야하는 HTTP 요청을 파악해야합니다.

관련 문제