Mechanize (Python) - Проблемы с отправкой формы

Я пытаюсь сделать что-то очень простое, используя библиотеку Python Mechanize. Я хочу перейти по адресу: JobSearch "> http://careers.force.com/jobs/ts2_JobSearch, выбрать Dublin Ireland из раскрывающегося списка, а затем нажать Enter.

Я написал для этого очень короткий сценарий Python, но по какой-то причине, когда я его запускаю, он возвращает HTML-код для страницы поиска по умолчанию, а не страницу поиска, созданную после выбора местоположения (Дублин, Ирландия) и нажатия клавиши ВВОД. Понятия не имею, что не так:

import mechanize

link = "http://careers.force.com/jobs/ts2__JobSearch"

br = mechanize.Browser()
br.open(link)
br.select_form('j_id0:j_id1:atsForm' )
br.form['j_id0:j_id1:atsForm:j_id38:1:searchCtrl'] =  ["Ireland - Dublin"]

response = br.submit()

newsite = response.read()

person robert    schedule 08.03.2014    source источник


Ответы (1)


Это на тот случай, если у вас все еще есть эта проблема, или если нет, на случай, если у кого-то еще будет эта проблема в будущем ...

Я просмотрел постданные, которые отправлялись вашим браузером, когда вы что-то выбрали вручную, и написал для вас функцию, которая приведет вас на нужную страницу, вручную выполнив операцию POST с данными в urllib.urlencoded. Ваше здоровье.

import mechanize,cookielib,urllib

def get_search(html,controls):
    #viewstate
    s=re.search('ViewState" value="', html).span()[1]
    e=re.search('"',html[s:]).span()[0]+s
    state=html[s:e]
    #viewstateversion
    s=re.search('ViewStateVersion', html).span()[1]
    s=s+re.search('value="', html[s:]).span()[1]
    e=re.search('"', html[s:]).span()[0]+s
    version=html[s:e]
    #viewstatemac
    s=re.search('ViewStateMAC',html).span()[1]
    s=s+re.search('value=\"',html[s:]).span()[1]
    e=re.search('"',html[s:]).span()[0]+s
    mac=html[s:e]
    return {controls[0]:controls[0], controls[1]:'',controls[2]:'Ireland - Dublin', controls[3]:'Search','com.salesforce.visualforce.ViewState':state,'com.salesforce.visualforce.ViewStateVersion':version,'com.salesforce.visualforce.ViewStateMAC':mac}

#Define variables and create a mechanize browser
link = "http://careers.force.com/jobs/ts2__JobSearch"
br = mechanize.Browser()
cj=cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.open(link)

#get the html data
html=br.response().read()

#get the control names from the correct form
br.select_form(nr=1)
controls=[control.name for control in br.form.controls]

#run function with html and control names list as parameters and run urllib.urlencode on what gets returned
postdata=urllib.urlencode(get_search(br.response().read(), controls))

#go to the webpage again but this time also submit the encoded data
br.open(link, postdata)

#There Ya Go
print br.response().read()
person Amazingred    schedule 03.05.2014