Правильно ли выполнен скрипт Python для входа на веб-страницу? - PullRequest
1 голос
/ 04 сентября 2010

Является ли этот скрипт 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 Development Engine Software Kit" , который я скачал с "Google App Engine" .

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

1 Ответ

3 голосов
/ 04 сентября 2010

Простой «просмотр источника» на странице входа в систему, 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-файлы, которые можно использовать (по крайней мере, для любого, кроме мимолетного времени; -).

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

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

...