我正在嘗試登錄此網站: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
提交
取消