Является ли этот скрипт Python для входа в систему правильным?

Является ли этот скрипт Python правильным?


import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
resp.read()

Я нашел этот скрипт ЗДЕСЬ. Он предназначен для того, чтобы сначала войти на веб-страницу, извлечь файлы cookie, сохранить их и использовать их для открытия какой-либо другой страницы на том же веб-сайте. Я хочу войти таким образом в свою учетную запись eBay (URL-адрес https://signin.ebay.com/ws/eBayISAPI.dll?SignIn), а затем перейти в папку "Входящие" в моей учетной записи eBay (URL-адрес http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1).

Итак, вот значения, которые мне нужно использовать в этом сценарии:

Первый (дополнительный) URL-адрес: https://signin.ebay.com/ws/eBayISAPI.dll?SignIn

Второй URL: http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1

Мой логин на eBay: tryinghard

Мой пароль на eBay: gettingsomewhere

Со всеми этими новыми значениями приведенный выше скрипт должен выглядеть так:


import urllib, urllib2, cookielib 

username = 'tryinghard' 
password = 'gettingsomewhere' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open(https://signin.ebay.com/ws/eBayISAPI.dll?SignIn', login_data) 
resp = opener.open(http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1') 
resp.read()

Это правильно? Я особенно подозрительно отношусь к login_data = линия (четвертая снизу), почему это j_password там вместо просто password?

Я попробовал этот скрипт со всеми этими значениями, и он не работал. Кто-нибудь знает, почему это не работает в моем случае?

Я уже научился входить в свою учетную запись eBay, а затем проверять некоторые другие страницы там с помощью запуска сценария Python, который использует twill в качестве внешнего модуля, но это было успешным, только когда я запустил этот сценарий из командной строки или из оболочки Python. Это не увенчалось успехом, когда я попытался запустить этот скрипт с помощью "Google App Engine Software Kit", который я скачал с "Google App Engine".

Позже мне сказали, что это не удалось, потому что "Google App Engine" не любит внешние модули. Вот почему я нашел этот скрипт - все модули, которые он импортирует в самом начале (urllib, urllib2, cookielib), являются встроенными модулями.

1 ответ

Решение

Простой "просмотр источника" на странице входа в систему, URL которого вы предоставляете, очень легко раскрывает следующую информацию об этом... (просто форматирование HTML минимально для удобства чтения):

<span style="display:-moz-inline-stack" class="unl">
  <label for="userid">User ID  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="userid" id="userid"></span></div>
<div><span style="display:-moz-inline-stack" class="unl">
  <label for="pass">Password  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="pass" id="pass" type="password"></span>

Как вы видите, имена ключевых полей ввода не username а также j_password как вы используете, а скорее userid а также pass, Поэтому, очевидно, что ваш код не может работать в том виде, в каком он сейчас есть.

Прочтите немного больше страницы, и вскоре вы также увидите:

<input type="checkbox" name="keepMeSignInOption" value="1" id="signed_in"></b>
<span class="pcsm"><label for="signed_in"><b>Keep me signed in for today.</b>

Скорее всего, вам нужно будет смоделировать этот флажок, чтобы получить файлы cookie, которые можно использовать (по крайней мере, на какое-то время, кроме мимолетного времени;-).

И так далее, и так далее, на самом деле - попытка автоматизировать взаимодействие со страницей, не удосужившись прочитать источник этой страницы, чтобы получить действительные идентификаторы и имена для использования, поражает меня как определенно демонстрирующая очень оптимистичное отношение к жизни, вселенной, и все...;-). Кстати, чтобы упростить такое взаимодействие (после просмотра исходного кода;-), я обнаружил, что механизация довольно удобна (и более надежна, чем попытка ее взломать только стандартной библиотекой, как вы делаете).

Кроме того, перед автоматическим взаимодействием с сайтом всегда проверяйте его robots.txt, чтобы убедиться, что вы не нарушаете его условия использования - сайты могут легко идентифицировать "роботов" (автоматическое взаимодействие) в отличие от "людей" и принимать ответные меры. против нарушения robots.txt путем запрета, внесения в черный список и т. д.; Вы действительно не хотите столкнуться с этим;-).

Другие вопросы по тегам