2011-12-20 19 views
7

Próbuję zalogować się do witryny za pomocą Pythona i zmechanizować.Przesyłanie formularzy za pomocą Mechanize (Python)

mam miejsce otwarte:

site = br.open("http://example.com/login.php") 

I mam listę formularzy (z br.forms).

<GET http://example.com/search.php application/x-www-form-urlencoded 
<HiddenControl(search=1) (readonly)> 
... 
<POST http://example.com/login.php application/x-www-form-urlencoded 
<TextControl(username=)> 
<PasswordControl(password=)> 
<CheckboxControl(stay=[1])> 
<SubmitControl(<None>=Log in) (readonly)>> 

Próbowałem przesłać pola nazwy użytkownika i hasła.

Próbowałem robić to tak:

br.select_form(nr=0) 
br.form["username"] = 'usernamehere' 
br.form["password"] = 'passwordhere' 
br.submit() 

Wtedy zdałem sobie sprawę, że formy ja próbujący wypełnić nie były pierwszymi na stronie, ale zmieniając 0 nie pomoże z niczego. Co powinienem zrobić, aby wybrać formularz na stronie takiej jak ta?

Jednak! To nie jedyny problem.

Kiedy uruchamiam go, otrzymuję ten błąd:

Traceback (most recent call last): 
File "C:\Python26\login.py", line 34, in <module> 
br.form["username"] = 'usernamehere' 
... 
ControlNotFoundError: no control matching name 'username' 

Jak mogę rozwiązać ten problem? D: Czy robię to zupełnie źle? Jeśli to drugie, jak miałbym to zrobić?

Odpowiedz

4

aby wybrać formę użyciu jego nazwy należy użyć:

br.select_form(name="order") 

co robisz tutaj:

br.form["username"] = 'usernamehere' 

próbuje ustawić wartość kontrolki pod wybranym formularzem, więc gdy nie może jej znaleźć, rzuca wyjątek, który widzisz.

+0

br.select_form (name = "username") zgłasza błąd: FormNotFoundError: brak formularza pasującego do nazwy 'username' - tak jak poprzednio, ale tym razem z linią, którą właśnie dodałem. – Matthew

+0

czy jesteś pewien, że masz odpowiednie imię? spróbuj formularza w br.forms(): wydrukuj formularz – tovmeod

+0

Pozytywny. Sprawdziłem br.forms() i surowy html. – Matthew

0

Można mieć kilka problemów

  • jeśli formularz jest generowany poprzez javascript, nie można go rozwiązać z mechanize - przynajmniej nie w prosty sposób do przodu - w tym przypadku polecam Ci spróbować i użyj selenium - możesz spróbować spojrzeć na źródło HTML strony - jeśli nie masz formularza w czystym html, jest całkiem jasne, że jest wstawiane do DOM przez javascript. Ponadto, jeśli formularz jest przesyłany poprzez javascript, mechanizacji nie pomoże

  • również, forma nie może być na pierwszej stronie - może chcesz ustawić mechanizacji śledzić przekierowania

+0

Nie, to nie javascript. I mogłem uzyskać dostęp do formularza w porządku za pomocą urllib ... Po prostu wolałbym używać mechanizmu mechanicznego, ponieważ nie jestem pewien, w jaki sposób cookiejar działa dokładnie i muszę się zalogować> _> A login.php to lokalizacja formularza. Jestem tego pewien. – Matthew

Powiązane problemy