Как выполнить утилизацию для сайта с логином - PullRequest
0 голосов
/ 13 мая 2019

''» Я хотел бы выполнить веб-слом для веб-сайта, который требует входа в систему. Я попробовал два разных подхода к коду. Я все еще не могу войти в систему. '' '

Разработка кода на Python с использованием BeautifulSoup:

Первый подход

import requests
from bs4 import BeautifulSoup
import http.cookiejar
import urllib.request
import urllib.parse

cj = http.cookiejar.CookieJar()

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

urllib.request.install_opener(opener)

authentication_url= 

http://127.0.0.1/orangehrm4.3.1/symfony/web/index.php/auth/login'

payload = {'txtUsername': '<username>', 'txtPassword': '<password>'}
data = urllib.parse.urlencode(payload).encode("utf-8")

req = urllib.request.Request(authentication_url, data)

resp = urllib.request.urlopen(req)

contents = resp.read()

Второй подход

import requests
from lxml import html

USERNAME = "<USERNAME>"
PASSWORD = "<PASSWORD>"

LOGIN_URL =
"http://127.0.0.1/orangehrm-4.3.1/symfony/web/index.php/auth/login"

URL = "http://127.0.0.1/orangehrm-4.3.1/symfony/web/index.php/dashboard"

def main():
    session_requests = requests.session()

    # Getting login csrf token
    result = session_requests.get(LOGIN_URL)
    tree = html.fromstring(result.text)
    crsf_token = 
    list(set(tree.xpath("//input[@name='_csrf_token']/@value")))[0]

    payload = {
        "txtUsername": USERNAME, 
        "txtPassword": PASSWORD, 
        "_csrf_token": authenticity_token
    }

    result = session_requests.post(LOGIN_URL, data = payload, headers = 
    dict(referer = LOGIN_URL))

    #URL to scrap
    result = session_requests.get(URL)
    soup = BeautifulSoup(result.text, 'html.parser')
    div = soup.find('div', id='branding')
    print(div)

if __name__ == '__main__':
    main()

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

Было бы очень полезно выяснить, как можно выполнить очистку веб-страниц после входа в систему с помощью Python, BeautifulSoup. '' '

1 Ответ

0 голосов
/ 21 мая 2019

Попробуйте использовать методы авторизации, доступные вместо методов полезной нагрузки.Например, здесь я использую HTTPBasicAuth

import requests
from requests.auth import HTTPBasicAuth
USERNAME = "<USERNAME>"
PASSWORD = "<PASSWORD>"
BASIC_AUTH = HTTPBasicAuth(USERNAME, PASSWORD)
LOGIN_URL = "http://127.0.0.1/orangehrm-4.3.1/symfony/web/index.php/auth/login"
response = requests.get(LOGIN_URL,headers={},auth=BASIC_AUTH)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...