python-3.x - python请求登录或填写表格
问题描述
如何填写表单并从登录中获取重定向 url。
您好我正在尝试提交登录页面。
尝试了多个页面,但没有成功。
<div class="form-group">
<input name="ctl00$MainContent$ctlLogin$_UserName" type="text" size="18" id="ctl00_MainContent_ctlLogin__UserName" accesskey="u" tabindex="60" placeholder="username" class="form-control" name="username" title="username" />
</div>
<div class="form-group">
<input name="ctl00$MainContent$ctlLogin$_Password" type="password" size="18" id="ctl00_MainContent_ctlLogin__Password" accesskey="p" tabindex="61" onkeyup="onkey(event, this.value, this)" placeholder="password" class="form-control" name="password" title="password" />
</div>
<input type="submit" name="ctl00$MainContent$ctlLogin$BtnSubmit" value="Login" id="ctl00_MainContent_ctlLogin_BtnSubmit" class="btn btn-danger" style="text-transform: uppercase;" />
<input name="ctl00$MainContent$ctlLogin$_IdBook" type="hidden" id="ctl00_MainContent_ctlLogin__IdBook" />
<input name="ctl00$MainContent$ctlLogin$Redir" type="hidden" id="ctl00_MainContent_ctlLogin_Redir" value="wager/welcome.aspx" />
import requests
import json
url = 'http://playsports365.com'
data = requests.get(url)
print(data.text)
form_data = {"username":"username","password":"password","action":"login"}
s = requests.session()
r = s.post(url,form_data)
但不知何故,它仍然带我进入第一个页面或登录页面本身。
解决方案
您必须从主页上抓取__VIEWSTATE
, __VIEWSTATEGENERATOR
, __EVENTVALIDATION
, ctl00$MainContent$ctlLogin$BtnSubmit
,的值并将其添加到您的 form_data 中。ctl00$MainContent$ctlLogin$Redir
import requests
import bs4 as bs
# Create session.
session = requests.Session()
headers = {
'Host': 'playsports365.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded',
'Origin': 'http://playsports365.com',
'Referer': 'http://playsports365.com/default.aspx',
}
# Add headers in session.
session.headers.update(headers)
# Login page request.
login_page_url = 'http://playsports365.com/default.aspx'
response = session.get(login_page_url)
soup = bs.BeautifulSoup(response.text, 'lxml')
# Extract payload data from login page.
event_target = soup.find('input', {'id': '__EVENTTARGET'}).get('value')
event_argument = soup.find('input', {'id': '__EVENTARGUMENT'}).get('value')
view_state = soup.find('input', {'id': '__VIEWSTATE'}).get('value')
view_state_generator = soup.find('input', {'id': '__VIEWSTATEGENERATOR'}).get('value')
event_validation = soup.find('input', {'id': '__EVENTVALIDATION'}).get('value')
btn_submit = soup.find('input', {'name': 'ctl00$MainContent$ctlLogin$BtnSubmit'}).get('value')
re_dir = soup.find('input', {'name': 'ctl00$MainContent$ctlLogin$Redir'}).get('value')
# Add data in payload.
form_data = {
'ctl00$MainContent$ctlLogin$_UserName': 'YOUR USERNAME',
'ctl00$MainContent$ctlLogin$_Password': 'YOUR PASSWORD',
'__EVENTTARGET': event_target,
'__EVENTARGUMENT': event_argument,
'__VIEWSTATE': view_state,
'__VIEWSTATEGENERATOR': view_state_generator,
'__EVENTVALIDATION': event_validation,
'ctl00$MainContent$ctlLogin$BtnSubmit': btn_submit,
'ctl00$MainContent$ctlLogin$Redir': re_dir,
}
# Request for login.
login_url = 'http://playsports365.com/default.aspx'
login_response = session.post(login_url, data=form_data)
print(login_response.status_code, response.text)
推荐阅读
- ibm-cloud - IBM Watson Assistant:具有上下文变量的正则表达式
- c# - 在运行时从主窗体添加按钮子窗体
- vue-component - nuxt js中的组件间通信
- spring-boot - 方法calculationRunner in ...的参数0需要一个找不到的“...”类型的bean
- python - 不同层之间的 Keras 输入/输出形状处理问题
- common-lisp - 使用 shebang 将 SBCL Common LISP 脚本作为可执行文件运行的问题
- azure-devops - 从单个发布管道无序地批准多个发布
- c# - System.TypeInitializationException SDK
- java - 如何修改maven项目依赖的代码
- windows - 如何跳过 Windows cmd 脚本中的 .svn 目录和包含的文件?