Является ли этот скрипт 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 путем запрета, внесения в черный список и т. д.; Вы действительно не хотите столкнуться с этим;-).