2017-03-14 11 views
0

私はWatir、Mechanize、Nokigiri gemsを使ってウェブスクレイピングを実践しています。Ruby Watir Gem、フォーム入力時のタイムアウト

私は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

最初はトリップアドバイザーの人と思っていたので、カヤックで何かをしようとしていて、同じ問題に走っていました。それで、両者がjquery datepickerを使用していたことが分かりました。私はWatirにdatepickerを使用させる方法を検索しようとしていました。おかげで、あなたは私の問題を解決するための正しい方法を指摘してくれました – KSan

+0

これは楽しい問題を解決するための心配はありません:) –

+0

ちょっと別の簡単な質問。私は今朝もスクリプトを使って遊んでいます。私はputs browser.urlとは異なる結果を得ていることを認識していません。鉱山が吹き出ている:https://www.tripadvisor.com/CheapFlightsHome – KSan