当前位置: 首页 > 面试题库 >

使用python请求登录网站

强金鑫
2023-03-14
问题内容

我正在尝试使用抓取数据的请求登录https://www.voxbeam.com/login。我是python的初学者,我大部分时候都做过教程,并使用BeautifulSoup自行完成了一些网页抓取工作。

查看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 方法,并发送 userNamepassword

我正在尝试:

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)

我期待,在成功登录进去 [R 的URL到仪表板,这样我就可以开始刮的数据,我需要。

当使用身份验证信息代替xxxxxx和yyyyyy运行代码时,得到以下输出:

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中找到任何建议我应该使用其中一种而不是
发布的内容

我也尝试过

r = requests.get(url, auth=('xxxxxxxx', 'yyyyyyyy'))

但它似乎也不起作用。


问题答案:

如上所述,您应该发送表单所有字段的值。这些可以在浏览器的Web检查器中找到。此表单发送2个附加的隐藏值:

url = "https://www.voxbeam.com//login"
data = {'userName':'xxxxxxxxx','password':'yyyyyyyyy','challenge':'zzzzzzzzz','hash':''}  
# note that in email have encoded '@' like uuuuuuu%40gmail.com

session = requests.Session()
r = session.post(url, headers=headers, data=data)

而且,许多站点都可以保护机器人免受诸如隐藏的表单字段,js,发送编码值等机器人的攻击。作为变体,您可以:

1)使用手动登录的Cookie:

url = "https://www.voxbeam.com"
headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"}
cookies = {'PHPSESSID':'zzzzzzzzzzzzzzz', 'loggedIn':'yes'}

s = requests.Session()
r = s.post(url, headers=headers, cookies=cookies)

2)使用模块硒:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = "https://www.voxbeam.com//login"
driver = webdriver.Firefox()
driver.get(url)

u = driver.find_element_by_name('userName')
u.send_keys('xxxxxxxxx')
p = driver.find_element_by_name('password')
p.send_keys('yyyyyyyyy')
p.send_keys(Keys.RETURN)


 类似资料:
  • 问题内容: 我正在尝试找到一种无需使用Python即可通过浏览器自动登录Facebook的方法。我尝试了“请求”库。尝试了几种方法: … … 最后一种方法填充页面上的“电子邮件”框,但“通过”框保持为空… 有人可以帮我吗?是否可以使用请求模拟FB登录? 谢谢! 问题答案: 您需要发送完整的表格。找出Facebook期望的最简单方法是使用类似Google Chrome的开发人员工具的工具 来监视您的

  • 问题内容: 我正在尝试使用Python中的“请求”模块发布一个登录网站的请求,但它实际上无法正常工作。我是新来的…所以我不知道是否应该制作我的用户名和密码cookie或我发现的某种HTTP授权内容(??)。 所以现在,我认为我应该使用“发布”和cookie。 我有种感觉,我在做饼干的事情做错了…我不知道。 如果登录不正确,则首页标题应显示在“ Locationary.com”上;如果登录不正确,则

  • 问题内容: 我正在尝试使用Python请求登录LinkedIn: 我似乎无法使用此方法登录。我什至尝试在有效负载中使用csrf等,但是会话不是应该为您解决吗? 关于最后一行的注意事项:我使用标题来检查是否已成功登录。(如果我已经登录,则应该看到“ Welcome!| LinkedIn”,而我会看到“世界上最大的专业网络| LinkedIn”) 我想念什么吗? 问题答案: 我修改了一个网络抓取模板,

  • 问题内容: 我正在尝试使用Python登录到此页面。 我尝试使用另一篇文章中描述的步骤,并获得了以下代码: 但这给了我以下输出: 我究竟做错了什么? 问题答案: 我建议使用精彩的模块。 下面的代码将使您登录到该站点,并在会话期间将cookie保留下来。

  • 我正在使用python的请求模块尝试登录网页。我打开了一个窗口。session(),然后我得到cookie和csrf令牌,它包含在meta标记中。我使用用户名、密码、一个隐藏的输入字段和meta标记中的csrf令牌来构建有效负载。之后,我使用post方法,传递登录url、cookie、负载和头。但在那之后,我无法访问登录页面后面的页面。我做错了什么? 这是我执行登录时的请求标头: 到目前为止,这是

  • 我试图发布一个请求登录到使用Python中的请求模块的网站,但它不是真的工作。我是新来的...所以我不知道我是否应该制作我的用户名和密码cookie或者我发现的某种类型的HTTP授权(??)。 所以现在,我想我应该用“post”和cookies。。。。 我有一种感觉,我做错了饼干的事...我不知道。 如果登录不正确,主页的标题应该显示为“Locationary.com”,如果登录不正确,则应显示为

  • 我正试着从下面的网站刮取一些信息。我是新来的,所以不完全了解正在发生的事情。我基本上是从我在互联网上找到的各种例子中获取信息,我正在使用selenium和python来帮助我导航到页面,从那里我可以刮取一些信息,我使用了下面的脚本,我可以导航到主页,关闭cookies并点击登录。此时,将弹出一个用于输入用户id和密码的弹出窗口div元素未被识别,每次我得到的错误是不存在这样的元素时,我添加了具有预

  • 问题内容: 好的,所以我将它用于reddit机器人,但我希望能够弄清楚如何登录到任何网站。如果那有道理… 我意识到不同的网站使用不同的登录表单等。那么我如何找出如何针对每个网站进行优化呢?我假设我需要在html文件中查找某些内容,但不知道是什么。 我不想使用Mechanize或任何其他库(这是这里所有其他答案的内容,实际上并没有帮助我了解正在发生的事情),因为我想自己学习所有功能的工作原理。 ur