Загрузка PDF-файла с веб-сайта, требующего входа с использованием запросов, python3

#python #beautifulsoup #python-requests

#python #beautifulsoup #python-запросы

Вопрос:

У меня есть веб-сайт, на котором я хочу загрузить PDF-файл с помощью запроса, веб-сайт требует, чтобы вы вошли в систему, после чего вы сможете получить доступ к файлу pdf.

Я использую этот скрипт, но он не работает, в чем проблема? Я использовал некоторый код из другого сообщения, но не смог понять, как решить эту проблему!!!

 import requests
import sys
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}


login_data = {
    'Email': 'My-email',
    'Password': 'My-password',
    'login': 'Login'
}


url = 'https://download-website' #The website i want to download the file from
filename = 'filename.pdf'
# creating a connection to the pdf
print("Creating the connection ...")


with requests.session() as s:
    url1 = 'https://login-website/' #The website i want to log in into
    r = s.get(url1, headers=headers, stream=True)
    soup = BeautifulSoup(r.content, 'html5lib')
    login_data['__RequestVerificationToken'] = soup.find('input', attrs={'name':'__RequestVerificationToken'})['value']

    r = s.post(url1, data=login_data, headers=headers, stream=True)
    with requests.get(url, stream=True) as r:
    
        if r.status_code != 200:
            print("Could not download the file '{}'nError Code : {}nReason : {}nn".format(
                url, r.status_code, r.reason), file=sys.stderr)
        else:
            # Storing the file as a pdf
            print("Saving the pdf file  :n"{}" ...".format(filename))
            with open(filename, 'wb') as f:
                try:
                    total_size = int(r.headers['Content-length'])
                    saved_size_pers = 0
                    moversBy = 8192*100/total_size
                    for chunk in r.iter_content(chunk_size=8192):
                        if chunk:
                            f.write(chunk)
                            saved_size_pers  = moversBy
                            print("r=>> %.2f%%" % (
                                saved_size_pers if saved_size_pers <= 100 else 100.0), end='')
                    print(end='nn')
                except Exception:
                    print("==> Couldn't save : {}\".format(filename))
                    f.flush()
                    r.close()
            r.close()
 

Ответ №1:

Я могу только догадываться, потому что я не знаю ссылку на веб-сайт. Попробуйте записать ключи пользовательских данных в нижнем регистре. Если это не сработает, попробуйте выяснить, что ожидает форма регистрации на веб-сайте, с помощью инструментов разработчика вашего браузера.