Próbuję zalogować się do witryny za pomocą Python i Mechanize, jednak napotykam problemy, gdy próbuję uzyskać dane POST, aby zachowywały się tak, jak chcę.Python zmechanizuj logowanie do strony internetowej
Zasadniczo chcę powtórzyć to za pomocą mechanizacji i Python:
wget --quiet --save-cookies cookiejar --keep-session-cookies --post-data "action=login&login_nick=USERNAME&login_pwd=PASSWORD" -O outfile.htm http://domain.com/index.php
Formularz wygląda następująco:
<login POST http://domain.com/index.php application/x-www-form-urlencoded
<TextControl(login_nick=USERNAME)>
<PasswordControl(login_pwd=PASSWORD)>
<CheckboxControl(login_auto=[1])>
<SubmitButtonControl(<None>=) (readonly)>>
Ustawienie odpowiednich wartości i wysłaniu formularza nie jest problemem, ale to pomija część "action = login".
response = self.browser.open(self.url+"/index.php")
self.browser.select_form(name="login")
self.browser["login_nick"] = self.encoded_username
self.browser["login_pwd"] = self.encoded_password
self.browser.method = "POST"
response = self.browser.open(self.browser.submit())
print (response.read())
Teraz pytanie brzmi, jak mogę dodać action=login
udział?
Edit: Ok, więc dodałem ukryte pole o nazwie działania i ustaw wartość logowania. Analizując strumień TCP za pomocą Wiresharka, dane POST są rzeczywiście tak skonstruowane, jak powinny. Wydaje się jednak, że mechanize miesza się z moim kodowaniem urnym (już zakodowałem wartości specjalnie dla zestawu znaków, którego używa strona internetowa). Na przykład moja nazwa użytkownika zawiera symbol Å - który mam zakodowany w urnie do% C5. Jednak gdy jest wysyłany z mechanizacją, jest wyświetlany jako% 25C5. Jak zatrzymać mechanizację przed zmianą ciągów?
EDYCJA: Zdałem sobie sprawę, że zamiast walczyć z mechaniką, mogłem po prostu nie urlencode moje struny przed wysłaniem ich. Sprawa zamknięta.
Zamiast edytować pytanie i dodawać odpowiedzi do treści pytania, należy opublikować odpowiedź na własne pytanie, a następnie ją zaakceptować. Jest bardziej * naturalny * w ten sposób. – Felix
Zrobiłem. Po prostu nie mogę tego zaakceptować przez kolejne 2 dni. –