Как щелкнуть ссылку, в href которой есть javascript:__doPostBack?

StackOverflow https://stackoverflow.com/questions/1418000

  •  07-07-2019
  •  | 
  •  

Вопрос

Я пишу сценарий очистки экрана на Python с модулем «механизировать», и я хотел бы использовать метод 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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

>>> 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top