0

我正在使用 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,并且没有解析选择选择列表选项后返回的 HTML .....如何访问第二个选择列表的选项?

4

2 回答 2

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')
于 2013-09-02T06:56:53.190 回答
0

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

我认为这是因为它仍在从初始页面加载中解析 HTML,并且没有解析选择 selectlist 选项后返回的 HTML。

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

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

不是机械化。您将需要使用可以执行 javascript 的东西,例如 selenium:

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

...并且您将需要了解一些javascript。

于 2013-09-02T06:43:32.597 回答