Модуль "запросы" не проходит с логином - PullRequest
0 голосов
/ 12 декабря 2018

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

Вот мой код:

import requests
import time

#This URL will be the URL that your login form points to with the "action" tag.
loginurl = 'https://jadepanel.nephrite.ro/login'

#This URL is the page you actually want to pull down with requests.
requesturl = 'https://jadepanel.nephrite.ro/clan/view/123'

payload = {
    'login_username': 'username',
    'login_password': 'password'
}

with requests.Session() as session:
    post = session.post(loginurl, data=payload)
    time.sleep(3)
    r = session.get(requesturl)
    print(r.text)

1 Ответ

0 голосов
/ 12 декабря 2018

login_username и login_password - не все необходимые параметры.Если вы посмотрите на запрос /login/ POST в инструментах разработчика браузера, то увидите, что отправляется также _token.

Это то, что вам нужно проанализировать излогин HTML .Таким образом, поток будет следующим:

  • получить https://jadepanel.nephrite.ro/login страницу
  • HTML, проанализировать его и извлечь _token значение
  • сделать запрос POST с логином, пароль и токен
  • для входа на сайт используйте авторизованный сеанс

Для анализа HTML мы можем использовать BeautifulSoup (есть и другие варианты,конечно):

from bs4 import BeautifulSoup

login_html = session.get(loginurl).text
soup = BeautifulSoup(login_html, "html.parser")

token = soup.find("input", {"name": "_token"})["value"]

payload = {
    'login_username': 'username',
    'login_password': 'password',
    '_token': token
}

Полный код:

import time

import requests
from bs4 import BeautifulSoup


# This URL will be the URL that your login form points to with the "action" tag.
loginurl = 'https://jadepanel.nephrite.ro/login'

# This URL is the page you actually want to pull down with requests.
requesturl = 'https://jadepanel.nephrite.ro/clan/view/123'

with requests.Session() as session:
    login_html = session.get(loginurl).text
    soup = BeautifulSoup(login_html, "html.parser")

    token = soup.find("input", {"name": "_token"})["value"]

    payload = {
        'login_username': 'username',
        'login_password': 'password',
        '_token': token
    }

    post = session.post(loginurl, data=payload)
    time.sleep(3)
    r = session.get(requesturl)
    print(r.text)
...