2011-04-11 3 views
2

기계화를 사용하여 페이지가 매겨진 루프를 반복합니다.기계화 : 똑같은 형태의 복수형에서 바로 제출

여러 개의 제출 입력이있는 양식에 문제가 있습니다. 입력 태그는 페이지 매김으로 사용되며 동적으로 생성됩니다. 내가 긁을 필요가있는 페이지를 반복 할 때, 나는 그 중 하나만이 "다음 페이지"로 나를 데려 갈 것이기 때문에 올바른 입력을 선택할 수 있어야합니다. 올바른 태그는 이름, 클래스, 값 등과 같은 다른 속성으로 식별 될 수 있습니다. 그러나 문제는 무엇인지를 어떻게 기계화 할지를 알 수는 없습니다. 이 게시물에, http://rubyforge.org/pipermail/mechanize-users/2008-November/000314.html에서

require 'mechanize' 
require 'yaml' 

url = "http://www.somewhere.com" 

agent = Mechanize.new 
page = agent.get(url) 

loop do 

    puts "some content from site using nokogiri" 

    if next_page = page.form_with(:action => /.*/) 
    page = next_page.submit(page.form_with(:action => /.*/).submits[3]) 
    else 
    break 
    end 

end 

하지만, 태그의 수는, 그래서 그냥을 제출의 하드 코드 번호를 따기 변화에게로 너무 좋은 생각되지 않습니다 :

나는이 시도. 어쩌면 CSS 또는 XPath는 셀렉터와 같은

loop do 

    puts "some content from site using nokogiri" 

    if next_page = page.form_with(:action => /.*/) 
    page = next_page.submit(:name => /the_right_submit_button/) 
    else 
    break 
    end 

end 

또는 뭔가,이 같은 방법이 있는지 내가 알고 싶습니다 무엇

이다.

답변

5

나는 보통 클릭 오른쪽 버튼을 선택 form.button_with를 사용

form = results_page.forms[0] 
results_page = form.submit(form.button_with(:name=>'ctl00$ContentBody$ResultsPager$NextButton')) 
+0

당신이 나에게이 답을하시기 바랍니다 설명 할 수 있습니까? – Aborted

+0

저는 Mechanize를 몇 년 동안 사용하지 않았습니다. 죄송합니다. 그러나 추측해야한다면 :'form.button_with'는 주어진'name' 속성을 가진 버튼을 리턴 할 것입니다. 그런 다음 버튼은'form.submit'에 전달됩니다.이 버튼은 해당 버튼을 사용하여 양식을 제출합니다. – Kris