我试图使用请求来收集数据登录到https://www.voxbeam.com/login。我是一个python初学者,我已经做了大部分的教程,并且用BeautifulSoup自己完成了一些web抓取。
查看HTML:
<form id="loginForm" action="https://www.voxbeam.com//login" method="post" autocomplete="off">
<input name="userName" id="userName" class="text auto_focus" placeholder="Username" autocomplete="off" type="text">
<input name="password" id="password" class="password" placeholder="Password" autocomplete="off" type="password">
<input id="challenge" name="challenge" value="78ed64f09c5bcf53ead08d967482bfac" type="hidden">
<input id="hash" name="hash" type="hidden">
我知道我应该使用方法post,并发送用户名和密码
我在尝试:
import requests
import webbrowser
url = "https://www.voxbeam.com/login"
login = {'userName': 'xxxxxxxxx',
'password': 'yyyyyyyyy'}
print("Original URL:", url)
r = requests.post(url, data=login)
print("\nNew URL", r.url)
print("Status Code:", r.status_code)
print("History:", r.history)
print("\nRedirection:")
for i in r.history:
print(i.status_code, i.url)
# Open r in the browser to check if I logged in
new = 2 # open in a new tab, if possible
webbrowser.open(r.url, new=new)
我希望在成功登录后,输入仪表板的URL,这样我就可以开始收集所需的数据。
当我使用身份验证信息代替xxxxxx和yyyyy运行代码时,会得到以下输出:
Original URL: https://www.voxbeam.com/login
New URL https://www.voxbeam.com/login
Status Code: 200
History: []
Redirection:
Process finished with exit code 0
我用www.voxbeam.com/login在浏览器中获得一个新标签
密码有问题吗? 我在HTML中遗漏了什么吗? 可以期望在r中获得仪表板URL,也可以重定向并尝试在浏览器选项卡中打开URL以查看响应,或者我应该以不同的方式执行操作?
我在这里读了几天类似的问题,但似乎每个网站的身份验证过程都有点不同,我检查了描述其他方法的http://docs.python-requests.org/en/latest/user/authentication/,但是在HTML中没有发现任何东西表明我应该使用这些方法之一而不是post
我也试过了
r = requests.get(url, auth=('xxxxxxxx', 'yyyyyyyy'))
但似乎也没用。
如上所述,您应该发送表单中所有字段的值。这些可以在浏览器的Web检查器中找到。此表单发送2个附加隐藏值:
此外,许多站点都有保护措施,以防出现类似bot的隐藏表单字段、js、发送编码值等变体,您可以:
1)使用手动登录的cookies:
2)使用硒模块:
这是非常棘手的取决于网站如何处理登录过程,但我所做的是,我使用查尔斯,这是一个代理应用程序,并听取请求,我的浏览器发送到网站的服务器,而我是手动登录。之后,我将Charles中显示的头和cookie复制到了我自己的python代码中,并且成功了!我假设cookie和header用于阻止bot登录。
请按以下方式更清楚地指定URL:
这将把焦点放在登录表单上,以便应用POST方法
相关问题 更多 >
编程相关推荐