如何从第二个选择列表中获取选项值?

时间:2015-04-28 14:54:53

标签: ruby web-scraping mechanize

我遇到了Mechanize / Ruby的问题。

当我选择第一个选项时,我无法获得第二个选择列表选项。如果我从Google中正确理解,那里就会有一些Ajax魔法。

目前我有这样的事情:

require 'rubygems'
require 'mechanize'
require 'nokogiri'

HOME_URL = 'http://www.parkers.co.uk/'

agent = Mechanize.new
page = agent.get(HOME_URL)

form = page.forms.first

form.field_with(:name => 'ctl00$contentHolder$topFullWidthContent$ctlManufacturerModelDropdownsNew$ddlManufacturer_Control').options.select.each do |manufacturer|
  p manufacturer.text.strip
    form.field_with(:name => 'ctl00$contentHolder$topFullWidthContent$ctlManufacturerModelDropdownsUsed$ddlModel_Control').options.each do |model|
      p model.text.strip
    end
end

我在控制台中输出了这个输出:

"Select a manufacturer"
"Select a model"
"Abarth"
"Select a model"
"Alfa Romeo"
"Select a model"
"Aston Martin"
"Select a model"
"Audi"

如您所见,我没有收到任何使用Mechanize的模型,例如:

“奥迪 - A4”,“奥迪 - A1”等。

我已经尝试过一些Mechanize特殊技能,例如selecttickselectedclickpresent?等等,但它并没有多大帮助。

如果您有任何想法/提示链接,请分享。

1 个答案:

答案 0 :(得分:0)

Mechanize不支持JavaScript,并且由于模型选择框是通过JavaScript填充的,因此使用选择框不起作用。但是,如果禁用JavaScript,http://www.parkers.co.uk/可以正常工作(尽管不同)。

在使用网站时禁用浏览器中的JavaScript,您会发现自己获得了制造商链接列表:

manufacturer links

点击其中一个制造商链接后,您将进入填充了模型选择的新页面。