2012-06-13 76 views
0

我试图用机械化抓住从这个网站纽约的大都会北方铁路价格填充选项形式:http://as0.mta.info/mnr/fares/choosestation.cfmPython的机械化与通过的Javascript

的问题是,当你选择第一个选项,网站使用JavaScript来填充您的可能目的地列表。我在python中编写了等效的代码,但我似乎无法完成所有工作。这是我到目前为止有:

import mechanize 
import cookielib 
from bs4 import BeautifulSoup 

br = mechanize.Browser() 
br.set_handle_robots(False) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)  Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

br.open("http://as0.mta.info/mnr/fares/choosestation.cfm") 

br.select_form(name="form1") 
br.form.set_all_readonly(False) 

origin_control = br.form.find_control("orig_stat", type="select") 
origin_control_list = origin_control.items 
origin_control.value = [origin_control.items[0].name] 

destination_control_list = reFillList(0, origin_control_list) 

destination_control = br.form.find_control("dest_stat", type="select") 
destination_control.items = destination_control_list 
destination_control.value = [destination_control.items[0].name] 

response = br.submit() 
response_text = response.read() 
print response_text 

我知道我没有给你的代码的reFillList()方法,因为它的长,但认为它正确地创建mechanize.option对象的列表。 Python不会抱怨我的任何事情,但在提交时,我得到这个警报的HTML:

“两条线之间的旅行的票价信息不在线提供,请联系我们的客户信息中心511与代表交谈以获取更多信息。“

我在这里错过了什么吗?感谢所有的帮助!

回答

0

如果不试图理解那个函数中疯狂的逻辑,那么不能真正做到。我建议使用js解决方案或全硒浏览器。