我正在尝试登录此网站:https : //www.blackrock.com/userplatform/signOn我正在使用以下脚本来执行此操作:import requestsfrom bs4 import BeautifulSoupheaders = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0'}resp = requests.get('https://www.ishares.com/us/sign-on.saml', headers=headers)soup_object = BeautifulSoup(resp.text, 'html.parser')csrf = soup_object.select_one('meta[name="_csrf"]').get('content')login_data = dict(userName='USERNAME', password='PASSWORD', csrfmiddlewaretoken=csrf)r = requests.post('https://www.blackrock.com/userplatform/signOn', data=login_data, headers={"Referer": "https://www.blackrock.com"})但是,当我在邮递员中运行脚本时,它给了我禁止的 403 错误消息。有人可以建议我做错了什么吗?该站点甚至共享了一个脚本,用于登录其门户并下载一些文件。但是它是用perl写的。共享该脚本以供参考。但我想用python来做。use strict;use File::Basename;use Getopt::Long;use WWW::Mechanize;use URI qw( );my $thisScript = basename($0);print "==START $thisScript==\n";my ($help, $proxy, $username, $password);my $urlsToBeDownloaded = "file-url-list.txt";my $url = "https://www.ishares.com/us/sign-on.saml";usage() if (@ARGV < 2 or ! GetOptions('proxy:s' => \$proxy, 'username=s' => \$username, 'password=s' => \$password) or defined $help);if ($username eq "" || $password eq "") { usage();}my $mech = WWW::Mechanize->new();if($proxy ne ""){ $mech->proxy(['http', 'https'], $proxy); }$mech->get($url);$mech->submit();my $ctoken = $mech->field('ctoken');$mech->get($mech->uri());$mech->submit_form( form_number => 1, fields => { userName => $username, password => $password, ctoken => $ctoken });
2 回答
吃鸡游戏
TA贡献1829条经验 获得超7个赞
它看起来像第三关键是_csrf而不是csrfmiddlewaretoken在login_data变量:
= >
login_data = dict(userName='USERNAME', password='PASSWORD', _csrf=csrf)
明月笑刀无情
TA贡献1828条经验 获得超4个赞
首先尝试使用 requests.session 它将自动存储和更新所有 cookie 和标头,因此您不必在每个请求中添加它们。
在 perl 脚本中的第二个我可以看到它们是 srt ctoken,我猜这是 csrf 令牌。所以你的帖子数据应该是这样的:
{
“userName”: “your username”,
“password”: “your password”,
“ctoken”: “the csrf token”
}
另外不要忘记在每次请求后更新 csrf 令牌。
添加回答
举报
0/150
提交
取消