Как щелкнуть ссылку, на которой есть javascript: __ doPostBack в href? - PullRequest
7 голосов
/ 13 сентября 2009

Я пишу сценарий экранного скребка на python с модулем 'mechanize', и я хотел бы использовать метод mechanize.click_link () для ссылки с javascript: __ doPostBack в href. Я считаю, что страница, которую я пытаюсь проанализировать, использует AJAX.

Примечание: мех - это механизатор. Браузер ()

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False

Я хочу получить источник страницы после нажатия на ссылку.

Ответы [ 3 ]

9 голосов
/ 01 марта 2011

Я не использую механизацию, но я много работаю в интернете с Python.

Когда я запускаю функцию javascript, такую ​​как __doPostBack, я делаю следующее:
Я захожу на веб-сайт в Firefox и использую расширение HttpFox , чтобы просмотреть параметры POST-запроса, отправляемого браузером веб-серверу при нажатии на соответствующую ссылку.
Затем я создаю тот же запрос в python, используя urllib.parse.urlencode для построения нужных мне строк запроса и данных POST.
Иногда веб-сайт также использует файлы cookie, поэтому я просто использую http.cookiejar в python.

Я успешно использовал эту технику несколько раз.

1 голос
/ 13 сентября 2009

Я не думаю, что mechanize поддерживает Javascript; для очистки страниц, которые по своей природе полагаются на выполнение Javascript, они могут использовать другой инструмент, например Selenium RC .

0 голосов
/ 12 октября 2009
>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
...