带有请求的 Python 登录贝宝

Dar*_*ber 5 python paypal python-requests

我想在成功登录贝宝后打印仪表板 html 源代码,这是我的完整代码

import requests
import lxml.html

# Get Auth & Login URL
get_login = requests.get('https://paypal.com/cgi-bin/webscr?cmd=_login-run')
get_login_response = get_login.text.encode('utf-8') #printing html source
get_login_html = lxml.html.fromstring(get_login_response) #printing <Element html at 0x7f19cb242ec0>
auth = get_login_html.xpath("//input[@name='auth']/@value") #printing [<InputElement 7fb0971e9f18 name='auth' type='hidden'>]
login_url = get_login_html.xpath("//form[@name='login_form']/@action")

# Post Login
payload = {
'login_cmd':'',
'login_params':'',
'login_email':'websec@spam4.me',
'login_password':'jancok666',
'auth':auth[0],
'submit.x':'Log In',
'form_charset':'UTF-8',
'browser_name':'Firefox',
'browser_version':'18',
'browser_version_full':'18.0'
}
post_login = requests.post(login_url[0], data=payload)
post_login_response = post_login.text.encode('utf-8')

print post_login_response
Run Code Online (Sandbox Code Playgroud)

但我得到的是像这样的验证码挑战的 html 源代码

......... <h1 class="headerText">Security Challenge</h1><p>Type the characters you see in the image for security purposes.</p>
Run Code Online (Sandbox Code Playgroud)

安全图片

那么如何在成功登录后打印仪表板 html 源代码?我的代码有什么问题?非常感谢:D

小智 2

您需要使用代理,以便请求不会来自同一个 IP 地址以避免 reCAPTCHA

import requests
import lxml.html

# Get Auth & Login URL
get_login = requests.get('https://paypal.com/cgi-bin/webscr?cmd=_login-run')
get_login_response = get_login.text.encode('utf-8') #printing html source
get_login_html = lxml.html.fromstring(get_login_response) #printing <Element html at 0x7f19cb242ec0>
auth = get_login_html.xpath("//input[@name='auth']/@value") #printing [<InputElement 7fb0971e9f18 name='auth' type='hidden'>]
login_url = get_login_html.xpath("//form[@name='login_form']/@action")

# Post Login
payload = {
'login_cmd':'',
'login_params':'',
'login_email':'websec@spam4.me',
'login_password':'jancok666',
'auth':auth[0],
'submit.x':'Log In',
'form_charset':'UTF-8',
'browser_name':'Firefox',
'browser_version':'18',
'browser_version_full':'18.0'
}

#proxy
proxy = {
 'https': '1.2.3.4:1234',
 'http': '1.2.3.4:1234'
}
post_login = requests.post(login_url[0], data=payload, proxies=proxy)
post_login_response = post_login.text.encode('utf-8')

print post_login_response
Run Code Online (Sandbox Code Playgroud)

像这样,您不应该再次获得验证码......:)