Como clicar em um link que tem javascript: __ doPostBack em href?
-
07-07-2019 - |
Pergunta
Eu estou escrevendo um script raspador de tela em python com o módulo 'mecanizar', e eu gostaria de usar o método mechanize.click_link () em um link que tem javascript: __ doPostBack em href. Eu acredito que a página que eu estou tentando analisar está usando AJAX.
Nota: mech é o mechanize.Browser ()
>>> 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
Eu gostaria de recuperar o código fonte da página depois de clicar no link.
Solução
Não uso mecanizar, mas eu fazer um monte de web raspagem-me com python.
Quando eu me deparo com uma função javascript como __doPostBack, eu faço o seguinte:
Eu acessar o web site no Firefox, e usar a extensão HttpFox para ver os parâmetros do POST solicitar o navegador enviada para o servidor web ao clicar no link relevante.
Eu, então, construir o mesmo pedido em python usando urllib.parse.urlencode para construir as strings de consulta e POST dados que eu preciso.
Às vezes, as utilizações do website biscoitos, bem, então eu só uso de python http.cookiejar.
Eu tenho usado essa técnica com sucesso várias vezes.
Outras dicas
Eu não acho suportes mechanize
Javascript; para páginas raspar que dependem intrinsecamente na execução Javascript para sua funcionalidade, você pode precisar usar uma ferramenta diferente, como 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