Вход на веб-сайт с помощью Python (urllib, urllib2, cookielib): как найти необходимую информацию для отправки?

Предисловие: я понимаю, что есть много ответов на подобные вопросы, например, о переполнении стека. Однако я не нашел ничего, касающегося входа в систему aspx, ни точного случая, подобного этому.

Проблема: мне нужно определить, какая информация необходима для входа в https://cableone.net/login.aspx, чтобы извлечь оттуда информацию.

Прогресс: до сих пор я нашел поля ввода в источнике login.aspx и скомпилировал скрипт на python с urllib, urllib2 и cookielib. Я игнорировал все, что имело пустое значение в моем скрипте.

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUIMzc1NzEwOTZkZFAEfkjXC+VNsqYoayGxa5/q4srT" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAK6lKDUCwLVx7ufCQL/+N3OBwLFgNGYD6KeUd6uNDBwc5zcR0u4hqrwv1fM" />
<input name="ctl00$plhMain$txtUserName" type="text" id="ctl00_plhMain_txtUserName" />
<input name="ctl00$plhMain$txtPassword" type="password" id="ctl00_plhMain_txtPassword" />
<input type="submit" name="ctl00$plhMain$btnLogin" value="Login" id="ctl00_plhMain_btnLogin" />

Затем я использовал указанные выше входные значения с python и urllib следующим образом.

import urllib, urllib2, cookielib
from cookielib import CookieJar


url = 'https://myaccount.cableone.net/Login.aspx'

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
cookies = cookielib.CookieJar()

#determine what I need to change with these values 
formValues = {
    "__VIEWSTATE":"/wEPDwUIMzc1NzEwOTZkZFAEfkjXC+VNsqYoayGxa5/q4srT",
    "__EVENTVALIDATION":"/wEWBAK6lKDUCwLVx7ufCQL/+N3OBwLFgNGYD6KeUd6uNDBwc5zcR0u4hqrwv1fM",
    "ctl00$plhMain$txtUserName":"myAccount",
    "ctl00$plhMain$txtPassword":"myPassword"
    }

data = urllib.urlencode(formValues)

response = opener.open("https://myaccount.cableone.net/Login.aspx",data)
thePage = response.read()
httpheaders = response.info()
print thePage 

person arete    schedule 08.04.2013    source источник
comment
Посмотрите, какие данные отправляются в инструментах разработки вашего браузера. Неважно, aspx это или нет, по крайней мере, не должно. Насколько вам известно, это просто HTTP-сервис. Убедитесь, что вы также подделываете заголовки, некоторые веб-сайты проверяют их (пользовательский агент, реферер и т. Д.). Также предлагаю использовать модуль requests.   -  person gatto    schedule 08.04.2013
comment
Спасибо за внимание. Я постараюсь подделать заголовки дальше. Что касается остальных моих входных значений, я что-то упускаю?   -  person arete    schedule 08.04.2013
comment
Что ж, для одного вы должны проанализировать форму (использовать lxml), чтобы получить значения, потому что они, скорее всего, динамические, поэтому жестко запрограммированные значения не подходят. И я бы сохранил все, даже пустые скрытые входы, на всякий случай. Итак, процесс load page - parse and get the form - post form data with cookies and headers.   -  person gatto    schedule 08.04.2013
comment
Какую совокупность знаний мне следует искать, если я хочу понять, о чем идет речь, например, о файлах cookie, заголовках http и т. Д.   -  person arete    schedule 09.04.2013


Ответы (1)


Обрисованный вами подход будет трудным, если форма хоть как-то динамична. Более универсальный способ - установить Google Chrome Canary с хорошими инструментами разработчика, нажмите «проверить страницу», затем перейти на вкладку «Сеть» и отметить «Сохранить журнал». (Возможно, вам понадобится версия Canary, потому что обычная не улавливает некоторые данные, если я не ошибаюсь)

Открыв все это, нажмите «Войти», и вы увидите все запросы, заголовки и данные POST. Это даст вам все данные POST, которые отправляются на сервер.

Теперь вы можете протестировать данные в своем скрипте и удалить их один за другим. Другой вариант тестирования запросов - использовать Advanced REST. Клиент, кстати.

person kolinko    schedule 14.10.2016