我正在使用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 .....我如何访问第二个选择列表的选项?
答案 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。