Веб-очистка на динамической веб-странице Получение маркера доступа

#python #web-scraping #beautifulsoup

Вопрос:

Может ли кто-нибудь помочь мне получить маркер доступа на этой веб-странице? Я пытаюсь выполнить веб-очистку, но не могу автоматически получить токен. http://200.75.4.210:8080/CIODCH/login.aspx

Это то, что у меня есть до сих пор, но я не могу получить маркер в ответе…

 # Get the token
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
login = {
    'Password': "123456789.", #it is a generic password, please dont change it
    'Usuario': "XXXXXXX"}

response = requests.post('https://apidch.kairosmining.com/auth/login', headers=headers, data=login).json()

# Use the token to input into the headers
url = 'http://apidch.kairosmining.com/api/CalidadAFlotacion'

headers.update({'authorization': 'Bearer %s' % response['token']})
 

Это URL-адрес, по которому я буду выполнять веб-очистку
http://200.75.4.210:8080/CIODCH/Intra/calidadproducto/cpfvista.aspx

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

1. Похоже, что указанное вами имя пользователя/пароль недействительны, я не могу войти с его помощью с помощью браузера

2. Попробуйте еще раз… Я просто изменил его

Ответ №1:

 import httpx
import pandas as pd
import trio
from bs4 import BeautifulSoup


loginurl = "http://200.75.4.210:8080/CIODCH/login.aspx"


async def get_soup(content):
    return BeautifulSoup(content, 'lxml')


async def log_in(client):
    r = await client.get(loginurl)
    soup = await get_soup(r.text)
    data = {k["id"]: k["value"] for k in soup.select("input[name^=__]")}
    data.update({
        "txtUser": "redacted",
        "txtPassword": "987654321.",
        "cmdLog": "Entrar"
    })
    await client.post(loginurl, data=data)
    r = await client.get(
        'http://200.75.4.210:8080/CIODCH/Intra/calidadproducto/cpfvista.aspx')

    soup = await get_soup(r.text)
    client.headers.update({
        "Authorization": "Bearer {}".format(soup.select_one('iframe')['src'].split('=')[-1])
    })


allin = []


async def workers(channel):
    async with channel:
        async for client, date in channel:
            print(f"Extracted {date}")
            data = {
                "fecha": date,
                "parametro": 1
            }
            r = await client.post('http://apidch.kairosmining.com/api/CalidadAFlotacion', data=data)

            goal = pd.DataFrame.from_records(r.json())
            if not goal.empty:
                allin.append(goal)


async def main():
    async with httpx.AsyncClient(timeout=None) as client, trio.open_nursery() as nurse:
        await log_in(client)

        sender, receiver = trio.open_memory_channel(0)

        async with receiver:
            for _ in range(20):
                nurse.start_soon(workers, receiver.clone())

            async with sender:
                for i in pd.date_range(start="2021-07-1", end="2021-07-22").strftime('%Y-%#m-%d'):
                    await sender.send([client, i])

    df = pd.concat(allin, ignore_index=True)
    print(df)


if __name__ == "__main__":
    trio.run(main)
 

Выход:

        Id                     Fecha  Area Turno Solidos Malla Comentarios         dia   hora
0    6375  2021-07-03T00:58:01.123Z    A2     B      43    30   00:55 hrs  03-07-2021  00:58
1    6376  2021-07-03T00:58:52.826Z    A1     B      38    25   00:55 hrs  03-07-2021  00:58
2    6377  2021-07-03T03:17:07.303Z    A1     B      41    29   03:15 hrs  03-07-2021  03:17
3    6378  2021-07-03T03:24:26.813Z    A2     B      46    38   03:20 hrs  03-07-2021  03:24
4    6379  2021-07-03T03:47:48.540Z    A0     B      38    30   21:30 hrs  03-07-2021  03:47
..    ...                       ...   ...   ...     ...   ...         ...         ...    ...
470  6807  2021-07-21T10:19:13.230Z  None  None    None  None        None  21-07-2021  10:19
471  6808  2021-07-21T10:19:13.523Z  None  None    None  None        None  21-07-2021  10:19
472  6809  2021-07-21T10:22:25.393Z  None  None    None  None        None  21-07-2021  10:22
473  6810  2021-07-21T10:22:25.450Z  None  None    None  None        None  21-07-2021  10:22
474  6811  2021-07-21T10:22:25.450Z  None  None    None  None        None  21-07-2021  10:22

[475 rows x 9 columns]
 

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

1. спасибо за ваш ответ… но при попытке получить данные, ответ заключается в том, что у меня нет нужного токена…. Кажется, я тоже не могу найти его в переменной r

2. @EliasUrra это делается для того, чтобы вы вошли на веб-сайт. вы должны следовать другим просьбам. особенно ваш пользователь/пропуск недействителен даже

3. Я только что проверил своего пользователя/пропуск, и все в порядке. Позвольте мне проверить, есть ли что-нибудь еще, что я мог бы сделать

4. @EliasUrra я еще раз проверил вашего пользователя/пропуск, и это тоже не работает для меня. даже другой пользователь упомянул об этом для вас. отсюда я не следую.

5. да, он прокомментировал это до того, как я изменил его.. но теперь я перепробовал 3 разных браузера и 3 разных сети, и все работает нормально… это довольно странно… вы пытаетесь использовать этот URL, верно? 200.75.4.210:8080/CIODCH/login.aspx