2017-03-14 9 views
0

저는 Watir, Mechanize 및 Nokigiri 보석을 사용하여 웹 스크랩을 연습하고 있습니다.Ruby Watir 보석, 양식 입력시 타이밍

내 Watir 스크립트에 문제가 있습니다. 제 계획은 항공편에서 http://tripadvisor.com/을 통해 가격 목록을 얻는 것입니다. 스크립트를 실행하면 Chrome 브라우저가 필요한대로 열리 며 스크립트가 양식, 출발지 및 목적지의 첫 번째 부분을 채운 다음 중단됩니다. 여기

This code has slept for the duration of the default timeout waiting for an Element to be present. If the test is still passing, consider using Element#exists? instead of rescuing UnknownObjectException 
/home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:515:in `rescue in wait_for_present': element located, but timed out after 30 seconds, waiting for true condition on #<Watir::Input: located: true; {:name=>"rt_leaveday", :tag_name=>"input"}> (Watir::Exception::UnknownObjectException) 
    from /home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:505:in `wait_for_present' 
    from /home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:522:in `wait_for_enabled' 
    from /home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:534:in `wait_for_writable' 
    from /home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:639:in `element_call' 
    from /home/jaffejoe/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/watir-6.2.0/lib/watir/elements/element.rb:303:in `send_keys' 
    from watir_test.rb:8:in `<main>' </ 

내 코드입니다 :

require 'watir' 

browser = Watir::Browser.new 

browser.goto('https://tripadvisor.com/CheapFlightsHome') 
browser.input(name: 'orig').send_keys('Boston, MA - Logan International Airport (BOS)') 
browser.input(name: 'dest').send_keys('Milan, Italy - All Airports (MIL)') 
browser.input(name: 'rt_leaveday').send_keys('1') 
browser.input(name: 'rt_leavemonth').send_keys('06/2017') 
browser.input(name: 'retday').send_keys('30') 
browser.input(name: 'leavemonth').send_keys('06/2017') 
browser.input(value: 'Search Flights').click 
puts browser.url 
browser.quit 
+0

이 존재합니까? –

+0

내가 이것을 할 때 나는 진실해진다 : browser.input을 놓는다 (이름 : 'rt_leaveday'). 존재 하는가? – KSan

답변

2
그것은 rt_leaveday에 값을 설정할 수 없습니다

하거나 숨겨진 입력이 때문에 rt_leavemonth 여기에 내가지고있어 오류 메시지입니다. 그러나 dateselector을 클릭하면 다음 스크립트를 실행할 수 있습니다.

require 'watir' 

browser = Watir::Browser.new 

browser.goto('https://tripadvisor.com/CheapFlightsHome') 
browser.text_field(name: 'orig').set('Boston, MA - Logan International Airport (BOS)') 
browser.text_field(name: 'dest').set('Milan, Italy - All Airports (MIL)') 
browser.execute_script('document.querySelector(".in_date").click()') 
browser.execute_script('document.querySelector(".day_28").click()') 
browser.execute_script('document.querySelector(".out_date").click()') 
browser.execute_script('document.querySelector(".day_2").click()') 
browser.span(id: "CHECK_FARES_BUTTON").fire_event :click 
puts browser.url 
browser.quit 
=> https://www.tripadvisor.com/CheapFlightsSearchResults-g187849-a_airport0.BOS-a_airport1.MIL-a_cos.0-a_date0.20170328-a_date1.20170402-a_nearby0.no-a_nearby1.no-a_nonstop.no-a_pax0.a-a_travelers.1-Milan_Lombardy.html 
+0

처음에 나는 tripadvisor와 함께 무엇인가 생각하고 있었다. 그래서 나는 카약에 무엇인가 노력하고 있었고, 같은 문제에 부딪치고 있었다. 그 때 jquery datepicker를 사용하고 있다는 것을 알았습니다. Watir에게 datepicker를 사용하게하는 방법을 찾으려고했습니다. 고마워, 내 문제를 해결하는 데 올바른 방법을 가르쳐 줬어. – KSan

+0

고칠 때 재미있는 문제는 아니었다. :) –

+0

안녕하세요. 또 다른 빠른 질문입니다. 저는 오늘 아침에 대본을 가지고 놀고 있습니다. 나는 puts browser.url에 대해 다른 결과를 얻고 있다는 것을 깨닫지 못하고 있습니다. 내 것은 뱉어 내고있다 : https://www.tripadvisor.com/CheapFlightsHome – KSan