Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 登录到scrape-获取真实性令牌,但生成的html用于登录页面而不是目标页面-我做错了什么?_Python_Authentication_Web Scraping - Fatal编程技术网

Python 登录到scrape-获取真实性令牌,但生成的html用于登录页面而不是目标页面-我做错了什么?

Python 登录到scrape-获取真实性令牌,但生成的html用于登录页面而不是目标页面-我做错了什么?,python,authentication,web-scraping,Python,Authentication,Web Scraping,我才刚刚开始,为了好玩/练习,我想我应该尝试每天自动下载我的股票投资组合余额——将数据存储在某个地方,并以图表的形式呈现出来——一种“尝试一切”的个人项目 Anyhoo-为了获得我需要的值-我需要使用电子邮件和密码登录-该页面还有一个真实性标记(你可以在html中看到),我知道了如何获取。我发布包含电子邮件、密码和令牌的有效负载,打印令牌(以检查每次的变化,因此很可能是新生成的),然后尝试使用每日余额访问页面并刮取总数 我现在得到的是原始的登录页面!正如我所说,我对这方面还不熟悉,所以这是从我遇

我才刚刚开始,为了好玩/练习,我想我应该尝试每天自动下载我的股票投资组合余额——将数据存储在某个地方,并以图表的形式呈现出来——一种“尝试一切”的个人项目

Anyhoo-为了获得我需要的值-我需要使用电子邮件和密码登录-该页面还有一个真实性标记(你可以在html中看到),我知道了如何获取。我发布包含电子邮件、密码和令牌的有效负载,打印令牌(以检查每次的变化,因此很可能是新生成的),然后尝试使用每日余额访问页面并刮取总数

我现在得到的是原始的登录页面!正如我所说,我对这方面还不熟悉,所以这是从我遇到的不同例子中拼凑而成的

问题是没有错误——所以这在某个地方是一个逻辑问题,因为我不完全理解我在做什么,所以我有点迷路了

感谢您的建议/解决方案等

代码如下:

import requests 
from lxml import html
import time
#open session
session_requests = requests.session()
#load info for login
payload = {
'email':'mymail@gmail.com',
'password':'mypassword',
'authenticity_token':'CSRF_TOKEN'
}
#describe login and portfolio balance page
login_url = 'https://dadada.com/login'
portfolio = 'https://dadada.com/my_one/portfolio'

#get login page
result = session_requests.get(login_url)

#obtain authenticity token
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='authenticity_token']/@value")))[0]

#check authenticity token obtained
print(authenticity_token)

post = session_requests.post(
login_url, 
data = payload, 

)

time.sleep(20)

r = session_requests.get(portfolio)
print(r.text)`

在最后的GET请求中,您只提供一个url作为参数。我的猜测是,您需要以某种方式将
真实性\u令牌
告知服务器。让它知道,它仍然是你。您可以尝试通过浏览器正常登录,并在登录
POST
后在
GET
上检查
HTTP标题
和cookie。可能令牌位于头中或保存在某些cookie中,而您的代码中没有这种情况。非常感谢。我原以为,通过将真实性令牌作为有效负载的一部分发布,我是在向服务器提供建议。在正常登录中,header中包含一个Authentity令牌。meta name=“csrf param”content=“Authentity\u token”/>因此我可以将其作为附加参数添加到get请求中?将尝试一下。无法使用headers={'csrf-param':'authenticity\u token','csrf token':authenticity\u token}r=session\u requests.get(公文包,headers=headers)来实现这一点,因此没有进一步的问题。