2016-07-19 4 views
0

Ich versuche, das folgende Kratzen zu tun, aber habe Probleme, den Namen des Formulars zu finden, um die Postleitzahlen einzugeben.Finden Sie ein Feld ohne einen Namen in Mechanize

require 'mechanize' 

agent = Mechanize.new 

page = agent.get('https://www.wendys.com/en-us/Location') 

wendy_form = page.form('find_loc') #name of the form 

wendy_form.altZip = '10013' 
#altZip is the input form name 

page = agent.submit(wendy_form) 

page.search('p.store_address').each do |li| 
    puts li.content 
end 

Dies ist die Form, die ich versuche zu bekommen.

<form data-bind="submit: destinationFinder.huntViaAddressForm, visible: destinationFinder.isShowingResultsView() || ! routePlanner.destination.exists()" id="find_loc" style=""> 

gibt es die folgende Fehlermeldung:

2.rb:9:in `<main>': undefined method `altZip=' for nil:NilClass (NoMethodError) 
+1

rechts auf das Element, und wählen Sie Element inspizieren und suchen nach das Namensattribut in Dev-Tools. – marcusshep

+0

Bereits getan. Es ist leer. – awald

+0

Gibt es noch andere Attribute für das Element, die Sie verwenden könnten? dh ID, Klasse, Elementtyp – marcusshep

Antwort

0

Aus den docs here konnte ich das folgende Snippet finden.

form = page.form_with(:id => "find_loc") 

Dies sollte auf das gewünschte Formularelement ausgerichtet sein.

0

Sie haben zwei Probleme zu beheben:

  • die richtige Form finden. Dazu sollten Sie die ID verwenden:

    form = page.form_with(:id => "find_loc")

  • Verwenden Sie den richtigen Weg, um das altZip Feld zu setzen:

    wendy_form['altZip'] = '10013'

Verwandte Themen