2013-09-02 5 views
0

Я использую Mechanize для получения страницы с формой. Форма имеет два поля, которые являются избранными. Во втором selectlist нет параметров по умолчанию, пока пользователь не выберет опцию из первого списка выбора. Я могу выбрать опцию из первого SelectList:Опции пусты во втором поле формы выбора после выбора опции в первом списке выбора (Mechanize and Ruby)

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
page = agent.get('http://www.bicyclebluebook.com/') 
form = page.forms.first 

a = form.field("customBicycleSearch$ddnBikeSearchMake") 
a.options[1].click 

Однако, после того, что я печатаю варианты второго SelectList, но я получаю пустой массив:

model = form.field("customBicycleSearch$ddnBikeSearchModel") 
pp model.options 

Я имею в виду, это происходит потому, он по-прежнему анализирует HTML из начальной pageload и не анализирует HTML, возвращенный после выбора опции selectlist ..... Как я могу получить доступ к параметрам второго выбора?

+0

его трудно попробовать, если вы не предоставите действительную страницу или ее содержимое – Bala

ответ

1

Вместо этого

page = agent.get('http://www.bicyclebluebook.com/') 

сделать

page = agent.get('http://www.bicyclebluebook.com/searchlisting.aspx?make=1081&model=67286&year=2012') 

Вы также можете использовать только «сделать»

page = agent.get('http://www.bicyclebluebook.com/searchlisting.aspx?make=1081') 
+0

Спасибо. Это то, что мне нужно. Мне было интересно, как вы расшифровали шаблон URL? Я попытался использовать сетевой инспектор моего браузера через онлайн-учебник, но не увенчался успехом ... – IkegawaTaro

+0

Вы можете использовать инструменты разработчика Chrome или плагин Firefox или FF, например, Tamperdata. – Bala

0

Однако, после того, что я печатаю варианты второго SelectList, но я получаю пустой массив:

Я имею в виду, что это потому, что он по-прежнему разбора HTML из начального PageLoad и не разборе HTML возвращен после выбора опции selectlist .

Второй выбор, вероятно, заполняется javascript. javascript можно использовать для прослушивания событий на странице html, например, для выбора чего-либо или изменения фокуса на другой элемент html. Когда запускается одно из этих событий, программа js затем может добавлять элементы на страницу, например <option>.

Как получить доступ ко второму варианту выбора?

Не механизирован. Вам нужно будет использовать что-то, что может выполнить JavaScript, как селен:

http://code.google.com/p/selenium/wiki/RubyBindings

... и вам нужно будет знать некоторые JavaScript.

+0

Это запрос ajax. Механизация может это сделать, вам просто нужно понять это. Тот факт, что это asp, усложняет работу, и селен может быть более простым способом, но я все же, вероятно, буду придерживаться механизации (если бы это был я). – pguardiario

Смежные вопросы