使用python请求登录网站

Pab*_*blo 6 html python authentication web-scraping python-requests

我正在尝试使用刮取数据的请求登录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">
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用方法post,并发送userName密码

我正在尝试这个:

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)
Run Code Online (Sandbox Code Playgroud)

我期待,在成功登录进去[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
Run Code Online (Sandbox Code Playgroud)

我通过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')) 
Run Code Online (Sandbox Code Playgroud)

但它似乎也没有用.

bl7*_*l79 10

如上所述,您应该发送表单的所有字段的值.这些可以在浏览器的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)
Run Code Online (Sandbox Code Playgroud)

此外,许多网站都有像隐藏表单字段,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)
Run Code Online (Sandbox Code Playgroud)

2)使用模块Selenium:

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)
Run Code Online (Sandbox Code Playgroud)