2010-03-07 2 views
1

это сценарий >>Python: скрипт для входа в систему, в чем проблема?

import ClientForm 
import urllib2 
request = urllib2.Request("http://ritaj.birzeit.edu") 

response = urllib2.urlopen(request) 
forms = ClientForm.ParseResponse(response, backwards_compat=False) 
response.close() 

form = forms[0] 
print form 
sooform = str(raw_input("Form Name: ")) 
username = str(raw_input("Username: ")) 
password = str(raw_input("Password: ")) 

form[sooform] = [username, password] 

request2 = form.click() 
try: 
    response2 = urllib2.urlopen(request2) 
except urllib2.HTTPError, response2: 
    pass 

print response2.geturl() 
print response2.info() # headers 
print response2.read() # body 
response2.close() 

при запуске сценария ,, я получил этой

Traceback (most recent call last): 
    File "C:/Python26/ritaj2.py", line 9, in <module> 
    form = forms[0] 
IndexError: list index out of range 

что проблема й ,, я работаю на окнах, Python 2.6.4

Обновление:

Мне нужен сценарий, который заходит на этот сайт и печатает ответ :)

+0

Как долго вы занимались этим самостоятельно? – 2010-03-07 13:50:57

+0

Я пытаюсь сделать этот скрипт около двух дней назад, и ничего не получал, и каждый раз, когда у меня есть код, он показывает ошибку, поэтому, если вы можете помочь мне в создании сценария входа для этого сайта, я буду благодарен:) –

ответ

1

Единственный <form> тег в HTML служил в этом URL является:

<form method="GET" action="http://www.google.com/u/ritaj"> 

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

Вы все еще можете получить на управления на странице с помощью

forms = ClientForms.ParseResponseEx(response) 

, что делает forms[0] искусственный, содержащий все элементы управления, которые не в форме.

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

>>> f = forms[0] 
>>> [c.name for c in f.controls] 
['q', 'sitesearch', 'sa', 'domains', 'form:mode', 'form:id', '__confirmed_p', '__refreshing_p', 'return_url', 'time', 'token_id', 'hash', 'username', 'password', 'persistent_p', 'formbutton:ok'] 

так что вы должны быть в состоянии установить username и password элементы управления «неформовой формы» f и перейти оттуда.

(бит стороны: raw_input уже возвращает строку, теряет лишние str() звонки вокруг нее).

0

Фактический адрес, кажется, использует https вместо http. (! Сохранить его в файл и посмотреть для себя) проверить urllib2 документ, чтобы увидеть, если он работает по протоколу HTTPS (я считаю, что вам нужно SSL)

+0

да его использование https, и я новичок в программировании на python, так что вы можете мне помочь, пожалуйста, в этом :) –