Я пытаюсь войти на этот сайт: https://www.blackrock.com/userplatform/signOn
И я использую следующий скрипт для этого:
import requests
from bs4 import BeautifulSoup
headers = {
'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
}
);
$mech->submit();
if($mech->content() =~ "sign-out.saml" ){
open (FILE, $urlsToBeDownloaded)or die "Can't open $urlsToBeDownloaded for read: $!";
while (<FILE>) {
chomp;
print "Downloading==>$_ \n";
eval {
$mech->get($_);
$mech->save_content(getFileNameFromUrl($_));
};
if($@){
print "ERROR: Downloading $_. $@\n";
}
}
close (FILE);
} else {
print "ERROR: Invalid email or password. Please try again.\n";
}
print "==END $thisScript==\n";
sub getFileNameFromUrl{
my $uri = URI->new($_[0]);
return ( $uri->path_segments )[-1];
}
sub usage {
print "\nUsage: perl $thisScript --proxy <Set the proxy (OPTIONAL)> --username <User Name> --password <Password> \n\n";
print("Ex: perl $thisScript --proxy \"http://proxyurl\" --username \"testuser\@test.com\" --password \"password\" \n\n");
exit;
}