我在获取一个相当简单的登录脚本以在特定网站上工作时遇到了很多麻烦。我的代码在另一个网站 (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 的东西。
任何帮助将非常感激