requests
首先,我会向您推荐与Python 模块中的会话使用相关的高级文档。
http://docs.python-requests.org/en/master/user/advanced/
我还注意到,在您调用sessions.post
重定向时导航到基本 URL:
https://www.searchiqs.com/NYALB/InvalidLogin.aspx?InvLogInCode=OldSession%2007/24/2016%2004:19:37%20AM
我“破解”了要导航到的 URL:
https://www.searchiqs.com/NYALB/
...请注意,如果我单击Show Login Fields
该页面上的链接,系统会提示我出现一个表单,其中会提示输入User ID
和Password
。您以编程方式进行搜索的尝试可能会失败,因为您尚未进行任何类型的身份验证。它可能在您的浏览器中有效,因为您已被允许访问它,或者通过您已完成但可能已经忘记的某些先前的身份验证,或者某种服务器端访问规则根据某些标准不要求这样做。
在本地解释器中运行这些命令,我可以看到站点所有者没有费心返回指示身份验证失败的状态代码。如果您检查,r.status_code
则为 200,但您r.text
将是Invalid Login
页面。我对 ASP 知之甚少,但我猜测 HTTP 状态代码应该指示实际发生的情况。
下面是一些代码,它并不能真正起作用,但可以说明您可能希望如何与站点和会话进行交互。
import requests
# Create dicts with our login and search data
login_params = {'btnGuestLogin': 'Log+In+as+GUEST'}
search_params = {'ctl00$ContentPlaceHolder1$txtName': 'Andrew'}
full_params = {'btnGuestLogin': 'Log+In+as+GUEST', 'ctl00$ContentPlaceHolder1$txtName': 'Andrew'}
# Create session and add login params
albany_session = requests.session()
albany_session.params = login_params
# Login and confirm login via searching for the 'ASP.NET_SessionId' cookie.
# Use the login page, not the search page first.
albany_session.post('https://www.searchiqs.com/NYALB/LogIn.aspx')
print(albany_session.cookies)
# Prepare a your search request
search_req = requests.Request('POST', 'https://www.searchiqs.com/NYALB/SearchAdvancedMP.aspx',data=search_params)
prepped_search_req = albany_session.prepare_request(search_req)
# Probably should work but does not seem to, for "reasons" unknown to me.
search_response = albany_session.send(prepped_search_req)
print(search_response.text)
您可以考虑另一种选择是使用 Python 绑定的 Selenium 浏览器自动化。
http://selenium-python.readthedocs.io/