Механизировать не следует перенаправления после входа на сайт
У меня было много проблем с получением того, что должно быть довольно простым сценарием входа в систему для работы на определенном веб-сайте. Мой код работает на другом сайте (Reddit), но он не работает на:
https://eo-sso-idp.eo.esa.int/idp/umsso20/login
После отправки формы и распечатки ответа браузер, похоже, сидит на странице с HTML, которую мой веб-обозреватель "не может найти", несмотря на то, что он сохранен в локальном файле HTML (скопирован и вставлен из вывода консоли в текстовый файл блокнота) с имя пользователя и пароль скопированы в соответствующие поля формы. Он не следует перенаправлению, которое должно перенести его на страницу администратора.
Это мой код:
# Create a new mechanize Browser instance
br = mechanize.Browser()
# Set browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_redirect(mechanize.HTTPRedirectHandler)
br.set_handle_refresh(mechanize.HTTPRefreshProcessor(), max_time=1)
# Open the login URL
br.open("https://eo-sso-idp.eo.esa.int/idp/umsso20/admin")
for link in br.links():
if link.text == "Login":
br.follow_link(link)
# Select the first form
br.select_form(nr=0)
# Enter the username and password
br["cn"] = username
br["password"] = password
# Submit the form
response = br.submit()
print response.read()
(Причина, по которой я настроил браузер на переход по ссылке на страницу входа в систему, а не на переход к ней напрямую, заключается в том, что на странице создается уникальная строка, которая добавляется к URL-адресу входа в систему)
В дополнение к механизации я попытался использовать следующий код с твиллом:
browser = get_browser()
browser.go("https://eo-sso-idp.eo.esa.int/idp/umsso20/admin")
browser.follow_link("Login")
fv("1", "cn", username)
fv("1", "password", password)
submit("1")
showlinks()
Но этот код выдает ошибку:
MissingSchema: Invalid URL u'/idp/umsso20/login?fn=T2dWam0zYUZLVTh5Z3dwWGNMZmlKdz09&act=NWNDNlZhNnAwaEUzbFVGV3FZaStLUT09&pars=dEN6SzZDY3hsQmtWYjNWMDhjdWRXTW1ON2FFSFFYK2JvemtXSFczMFRuRWtGQjgwOWRjVFRsQVZUVlZMeDNmd0VDM25hSkNvWGZ1NkI0NjJWcGFNY0ZaNlFSN2JqL3RFUTJYM3NIRWdvbWJGVmo1bmhGNElYV2YyY2l4NmNIcWJZeVlLN2NFYnQrTzNaS2luRzJ2UTlnPT0ie': No schema supplied. Perhaps you meant http:///idp/umsso20/login?fn=T2dWam0zYUZLVTh5Z3dwWGNMZmlKdz09&act=NWNDNlZhNnAwaEUzbFVGV3FZaStLUT09&pars=dEN6SzZDY3hsQmtWYjNWMDhjdWRXTW1ON2FFSFFYK2JvemtXSFczMFRuRWtGQjgwOWRjVFRsQVZUVlZMeDNmd0VDM25hSkNvWGZ1NkI0NjJWcGFNY0ZaNlFSN2JqL3RFUTJYM3NIRWdvbWJGVmo1bmhGNElYV2YyY2l4NmNIcWJZeVlLN2NFYnQrTzNaS2luRzJ2UTlnPT0ie?
Похоже, что метод POST формы пытается отправить браузер на что-то, что на самом деле не URL.
Любая помощь приветствуется