在第一个选择列表中选择一个选项后,选项在第二个选择列表表单字段中为空(Mechanize和Ruby)

时间:2013-09-02 06:20:46

标签: ruby mechanize

我正在使用Mechanize来获取带有表单的页面。表单有两个选择列表字段。在用户从第一个选择列表中选择了一个选项之前,第二个选择列表没有默认选项。我可以从第一个选择列表中选择一个选项:

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

然而,在那之后,我打印第二个选择列表的选项,但我得到一个空数组:

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

我认为这是因为它仍然是从初始页面加载中解析HTML而不是解析选择了selectlist选项后返回的HTML .....我如何访问第二个选择列表的选项?

2 个答案:

答案 0 :(得分:1)

而不是这个

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

这样做

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

您也可以只使用'make'

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

答案 1 :(得分:0)

  

然而,在那之后,我打印了第二个选择列表的选项,但我得到了   一个空数组:

     

我在想这是因为它仍在解析HTML   初始页面加载并不解析选择列表后返回的HTML   选项已被选中。

第二个选择可能是由javascript填充的。 javascript可用于监听html页面上的事件,例如选择某些内容,或将焦点更改为其他html元素。当触发其中一个事件时,js程序可以向页面添加元素,如<option>

  

如何访问第二个选择列表的选项?

没有机械化。你需要使用能够执行javascript的东西,比如selenium:

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

...你需要知道一些javascript。