Python mecaniza javascript

Estoy tratando de usar mecanizar para obtener los precios del metro-norte de Nueva York desde este sitio:
http://as0.mta.info/mnr/fares/choosestation.cfm

El problema es que cuando selecciona la primera opción, el sitio utiliza javascript para completar su lista de posibles destinos. He escrito un código equivalente en python, pero parece que no consigo que todo funcione. Esto es lo que tengo hasta ahora:

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 

Sé que no te di el código para el método reFillList() porque es largo, pero supongo que crea correctamente una lista de objetos mechanize.option. Python no se queja de nada sobre mí, pero al enviar obtengo el html para esta alerta:

“La información de tarifas para viajes entre dos líneas no está disponible en línea. Comuníquese con nuestro Centro de Información al Cliente al 511 y pida hablar con un representante para obtener más información”.

¿Me estoy perdiendo de algo? ¡Gracias por toda la ayuda!

    Si conoce las ID de las estaciones, es más fácil POSTAR la solicitud usted mismo:

     import mechanize import urllib post_url = 'http://as0.mta.info/mnr/fares/get_fares.cfm' orig = 295 #BEACON FALLS dest = 292 #ANSONIA params = urllib.urlencode({'dest_stat':dest, 'orig_stat':orig }) rq = mechanize.Request(post_url, params) fares_page = mechanize.urlopen(rq) print fares_page.read() 

    Si tiene el código para encontrar la lista de ID de destino para un ID de inicio dado (es decir, una variante de refillList() ), puede ejecutar esta solicitud para cada combinación:

     import mechanize import urllib, urllib2 from bs4 import BeautifulSoup url = 'http://as0.mta.info/mnr/fares/choosestation.cfm' post_url = 'http://as0.mta.info/mnr/fares/get_fares.cfm' def get_fares(orig, dest): params = urllib.urlencode({'dest_stat':dest, 'orig_stat':orig }) rq = mechanize.Request(post_url, params) fares_page = mechanize.urlopen(rq) print(fares_page.read()) pool = BeautifulSoup(urllib2.urlopen(url).read()) #let's keep our stations organised stations = {} # dict by station id for option in pool.find('select', {'name':'orig_stat'}).findChildren(): stations[option['value']] = {'name':option.string} #iterate over all routes for origin in stations: destinations = get_list_of_dests(origin) #use your code for this stations[origin]['dests'] = destinations for destination in destinations: print('Processing from %s to %s' % (origin, destination)) get_fares(origin, destination)