2017-03-14 1 views
0

Je pratique le webscraping en utilisant les gemmes Watir, Mechanize et Nokigiri.Rubis Watir Gem, Temporisation sur l'entrée de formulaire

Je rencontre un problème avec mon script Watir. Mon plan est d'obtenir une liste des prix des vols via http://tripadvisor.com/. Lorsque je lance le script, le navigateur Chrome s'ouvre comme il se doit, le script remplit les premières parties du formulaire, l'origine et la destination, puis s'arrête. Voici le message d'erreur que je reçois:

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>' </ 

Voici mon code:

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

est l'élément présent? –

+0

Je reçois un vrai quand je fais ceci: met browser.input (nom: 'rt_leaveday'). Existe? – KSan

Répondre

2

Il ne peut pas valeur définie sur le rt_leaveday ou rt_leavemonth parce qu'ils sont entrées cachées. Mais vous pouvez exécuter un script pour cliquer sur 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

Au début, je pensais que c'était quelque chose avec TripAdvisor, donc j'essayais quelque chose sur le kayak et courait dans le même problème. C'est à ce moment que je me rends compte qu'ils utilisaient jquery datepicker. J'essayais alors de chercher comment obtenir Watir pour travailler avec datepicker. Merci l'homme, vous m'avez pointé vers la bonne façon de résoudre mon problème – KSan

+0

Pas de soucis c'était un problème amusant à résoudre :) –

+0

Hey une autre question rapide. Je joue à nouveau avec le script ce matin et je ne me rends pas compte que je reçois des résultats différents pour le fichier browser.url. Le mien crache: https://www.tripadvisor.com/CheapFlightsHome – KSan