Не удается войти в facebook с помощью модуля запросов

#python #python-3.x #web-scraping #python-requests

Вопрос:

Я пытаюсь войти в facebook с помощью модуля запросов. Хотя кажется, что я правильно подготовил полезную нагрузку, но когда я отправляю ее с запросами на публикацию, я не получаю желаемого содержимого в ответе. Однако я получаю код статуса 200. Чтобы вы знали, если я получу соответствующий ответ, я должен найти в нем свое полное имя.

Сначала я попытался сделать следующее:

 import requests
from bs4 import BeautifulSoup
from datetime import datetime

link = 'https://www.facebook.com/'
base_url = 'https://www.facebook.com{}'

time = int(datetime.now().timestamp())

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
    'referer': 'https://www.facebook.com/',
}

with requests.Session() as s:
    r = s.get(link)
    soup = BeautifulSoup(r.text,"lxml")
    form_url = soup.select_one("form[data-testid='royal_login_form']")['action']
    post_url = base_url.format(form_url)
    payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
    payload['email'] = 'YOUR_EMAIL'
    payload['encpass'] = f'#PWD_BROWSER:0:{time}:YOUR_PASSWORD'
    payload.pop('pass')
    res = s.post(post_url,data=payload,headers=headers)
    print(res.url)
    print(res.text)
 

Это еще один способ, который я пробовал, но тоже не сработал:

 import requests
from bs4 import BeautifulSoup
from datetime import datetime

login_url = 'https://www.facebook.com/login/device-based/regular/login/?login_attempt=1amp;lwv=101'
time = int(datetime.now().timestamp())

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'origin': 'https://www.facebook.com',
    'referer': 'https://www.facebook.com/login/device-based/regular/login/?login_attempt=1amp;lwv=101'
}

with requests.Session() as s:
    r = s.get(login_url)
    soup = BeautifulSoup(r.text,"lxml")
    payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
    payload['email'] = 'YOUR_EMAIL'
    payload['encpass'] = f'#PWD_BROWSER:0:{time}:YOUR_PASSWORD'
    payload['had_password_prefilled'] = 'true'
    payload['had_cp_prefilled'] = 'true'
    payload['prefill_source'] = 'browser_dropdown'
    payload['prefill_type'] = 'contact_point'
    payload['first_prefill_source'] = 'last_login'
    payload['first_prefill_type'] = 'contact_point'
    payload['prefill_contact_point'] = 'YOUR_EMAIL'
    payload.pop('pass')
    r = s.post(login_url,data=payload,headers=headers)
    print(r.status_code)
    print(r.url)
 

Как я могу войти в facebook с помощью запросов?

Комментарии:

1. Какой ответ вы получаете? Я попытался перехватить запрос на вход в систему, и это выглядело примерно так: jazoest=**** lsd=*********** email=MY_EMAIL login_source=comet_headerless_login next= encpass=#PWD_BROWSER:ENCRYPTED_PASSWORD . Зашифрован ли ваш пароль с использованием того же алгоритма, что и они, и знаете ли вы, необходимы ли эти другие параметры?

2. Похоже, что facebook требует lsd , чтобы параметр для запроса на вход работал; в противном случае, хотя ответ выглядит нормально, браузер перенаправит его на экран «Ваш запрос не может быть обработан».

3. Эти параметры генерируются случайным образом при загрузке веб-страницы и сохраняются в теге ввода. Таким образом, вам, скорее всего, потребуется извлечь версию веб-страницы, чтобы получить эти значения, прежде чем вы сможете сделать запрос. Эта страница, похоже, решает аналогичную проблему: titanwolf.org/Network/q/e9ade12a-b98a-4099-9899-03c1332f80c0/y

4. Значение lsd уже есть в полезной нагрузке. При печати вы можете просмотреть все параметры, используемые в полезной payload нагрузке . Что касается шифрования пароля, то при использовании 0 в этой части :0: вы можете использовать свой пароль как есть. Однако, когда это так :5: , вы должны использовать зашифрованный пароль.

Ответ №1:

Это может быть случай проблемы xy

Я рекомендую попробовать Selenium при программном доступе к Facebook.

Дополнительные примеры использования селена при входе в систему.

https://www.askpython.com/python/examples/python-automate-facebook-login

https://www.guru99.com/facebook-login-using-python.html

Ответ №2:

Если вход в систему-это все, что вам требуется, то, используя selenium, вы можете сделать это как:

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
URL = 'https://www.facebook.com/'
PATH = r'C:Program Files (x86)chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get(URL)
email = driver.find_element_by_id('email')
email.send_keys('YourEmail')
password = driver.find_element_by_id('pass')
password.send_keys('YourPassword')
password.send_keys(Keys.RETURN)
 

Я бы рекомендовал вам использовать браузер, который вы часто используете для входа в систему для этого процесса.