[英]Trying to log in to a website with requests
这是网站: https : //nacionalidade.justica.gov.pt/
如您所见,有一个输入类。 如何使用将发送到输入类的参数向站点发送请求?
输入密码后,页面发生变化,如何获取新页面的内容?
这是我需要将密码发送到的班级。
import requests
from lxml import html
payload = {'password' : 'mypassword... not gonna write it here',
'ABE4A1723D5F2906F222936AD0E9BE0E' :
'ABE4A1723D5F2906F222936AD0E9BE0E'}
url = "https://nacionalidade.justica.gov.pt/"
session_requests = requests.session()
result = session_requests.get(url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='ABE4A1723D5F2906F222936AD0E9BE0E']/@value")))[0]
result = session_requests.post(
url,
data = payload,
headers = dict(referer=url)
)
r =requests.get(url,headers= dict(referer = url))
tree = html.fromstring(result.content)
bucket_names = tree.xpath("//div[@class='repo-list--repo']/a/text()")
print(bucket_names)
我收到一个索引错误,我不知道为什么
Traceback (most recent call last):
File "c:/Users/?/Desktop/?/?/new.py", line 12, in <module>
authenticity_token = list(set(tree.xpath("//input[@name='ABE4A1723D5F2906F222936AD0E9BE0E']/@value")))[0]
IndexError: list index out of range
这是一个示例“如何以正确的方式进行操作”,但没有您的密码等。所以请随意采用它作为您的解决方案。
from lxml.html import fromstring
import requests
session = requests.Session()
html = session.get('https://nacionalidade.justica.gov.pt/').content
form = fromstring(html).xpath('//form')[0]
post = {}
for input in form.inputs:
if not input.name:
continue
post[input.name] = input.value
print('Initial form data')
print(post)
response = session.post('https://nacionalidade.justica.gov.pt/Home/GetEstadoProcessoAjax', data=post)
print(response.text)
输出
Initial form data
{'__RequestVerificationToken': 'p3AmUxqx-6Ipv9EbujoUid5TAKTm76oVmYIaB2UZMv_QzcH7LXaYhGwcQcqXqjWlJjJyvcKgcX48brUkWNvrmz-q3MPlg8mZAm56EGUooYw1', 'SenhaAcesso': '', 'DD94BAEBEF20FBD64FF8CA12170D623D': None, 'Email': None}
<link href="/layout/assets/css/grafico_nacionalidade.css" rel="stylesheet" />
<style>
.titulo {
color: #3399cc;
}
/*Bloco para o estado do processo*/
#block_container {
font-size: 1.5rem;
font-weight: bold;
}
#bloc1
{
display:inline;
}
#bloc2
{
display:inline;
font-size:1rem;
font-weight:normal;
}
/*-------------------------------------*/
</style>
<div>
<div id="txtErro" style="background-color:#FBEDED; width:100%; ">
<div style="padding:35px;">
A senha <b></b> não corresponde a nenhum processo de nacionalidade ativo.
<p></p>
<br />
Verifique que digitou a sua senha corretamente.
<p></p>
<br />
Caso não encontre o seu processo dirija-se à <a href="http://www.irn.mj.pt/IRN/sections/irn/contactos">conservatória</a> onde entregou o seu pedido.
Na <a href="http://www.irn.mj.pt/IRN/sections/irn/contactos">Conservatória dos Registos Centrais</a>, em Lisboa, sem marcação prévia é possível obter a sua senha de acesso.
</div>
</div>
</div>
<hr />
<p>
<a href="/Home/PesquisaProcesso">Voltar</a>
</p>
重要的:
您必须对所有请求使用一个请求会话对象,因为有激活 CSRF 令牌功能的 cookie 会话。
您必须发送所有初始表单数据 + 您的密码或安全号码字段
也许您必须发送一些额外的 HTTP 标头来获取响应,因为它是一个 AJAX 请求(我相信)。
看起来没有这个名字的输入。 看看是否可以使用更稳定的选择器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.