Python авторизация - PullRequest
       2

Python авторизация

0 голосов
/ 17 февраля 2020

Мне нужно написать скрипт, который включен в личный кабинет моего провайдера Inte rnet и передает информацию о текущем балансе.

В данный момент я застрял во время авторизации. Я нашел и отредактировал такой скрипт для себя:

import requests

url = 'https://bill.tomtel.ru/login.html'

USERNAME, PASSWORD, = 'mylogin', 'mypass'

resp = requests.get(url, auth=(USERNAME, PASSWORD))

r = requests.post(url)

print(r.content)

Но это не помогает пройти авторизацию ...

Я могу ввести эту ссылку через браузер и go для страница этого типа:

https://bill.tomtel.ru/fastcom/!w3_p_main.showform?FORMNAME=QFRAME&CONFIG=CONTRACT&SID=BLABLABLA&NLS=WR

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

Пожалуйста, помогите с этим.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

В вашем браузере, вероятно, хранится токен сеанса / cook ie, поэтому вы можете получить к нему доступ через браузер. Здесь есть пара проблем:

  1. Похоже, вам сначала нужно войти на сайт - методом POST, а не GET. GET - это то, что загружает страницу. Но как только вы отправите форму, она выполнит запрос POST.
  2. На самом деле, использование requests для входа на сайт не так просто, как кажется. Обычно вам нужно найти URL, по которому он post (изучите панель инструментов разработчика, чтобы увидеть его), и вам часто приходится передавать информацию в дополнение к вашему имени пользователя / паролю, например токен csrf , повар ie или что-то еще.
  3. Я бы предложил для этого использовать браузер-автоматор, возможно, что-то вроде selenium Webdriver. Это делает вход на сайт намного проще, чем использование HTTP в необработанном запросе, поскольку он эмулирует браузер. Я хотел бы предложить это - это намного проще и быстрее!

Еще одна вещь, на которую следует обратить внимание: auth=(USERNAME, PASSWORD) это не совсем имя пользователя / пароль в форме (это что-то еще), но я не думаю, что понимание того, что слишком важно для того, что вы пытаетесь сделать.


Вот URL и необходимые данные формы для входа в систему:

enter image description here

0 голосов
/ 17 февраля 2020

Я думаю, вы должны попробовать это:

import requests

url = 'https://bill.tomtel.ru/signin.php'

USERNAME = input('Enter your username: ')
PASSWORD = input('Enter your password: ')
d = {
'USERNAME' : USERNAME,
'PASSWORD' : PASSWORD,
'FORMNAME' : 'QFRAME'}

session = requests.Session()

resp = session.post(url, data=d).text
if not '<TITLE>' in resp:
    print('Incorrect username or password!')
    quit()
print('Logging in ... ')
for line in resp.split('\n'):
    if 'location' in line:
        red = 'https://bill.tomtel.ru/fastcom/!w3_p_main.showform%s' % line.replace(' if (P>0) self.location.replace("', '').replace('");', '')
if not red:
    print('An error has occured')
    quit()
print('Redirecting to %s' % red)
page = session.get(red).text

print('')
print('          MAIN PAGE')
print(page)
...