使用请求登录网站 [英] logging in to website using requests

查看:104
本文介绍了使用请求登录网站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试了两种完全不同的方法.但是我仍然无法获得登录后才存在的数据.

I've tried two completely different methods. But still I can't get the data that is only present after loggin in.

我尝试使用请求执行一项操作,但是xpath返回null 汇入要求 从lxml导入html

I've tried doing one using requests but the xpath returns a null import requests from lxml import html

USERNAME = "xxx"
PASSWORD = "xxx"

LOGIN_URL = "http://www.reginaandrew.com/customer/account/loginPost/referer/aHR0cDovL3d3dy5yZWdpbmFhbmRyZXcuY29tLz9fX19TSUQ9VQ,,/"
URL = "http://www.reginaandrew.com/gold-leaf-glass-top-table"


def main():
FormKeyTxt = ""
session_requests = requests.session()

# Get login csrf token
result = session_requests.get(LOGIN_URL)
tree = html.fromstring(result.text)
# Create payload
formKey = str((tree.xpath("//*[ @ id = 'login-form'] / input / @ value")))
FormKeyTxt = "".join(formKey)
#print(FormKeyTxt.replace("['","").replace("']",""))

payload = {
    "login[username]": USERNAME,
    "login[password]": PASSWORD,
    "form_key": FormKeyTxt,
    "persistent_remember_me": "checked"

}

# Perform login
result = session_requests.post(LOGIN_URL, data=payload)

# Scrape url
result = session_requests.get(URL, data=payload)
tree = html.fromstring(result.content)
bucket_names = tree.xpath("//span[contains(@class, 'in-stock')]/text()")
print(bucket_names)
print(result)
print(result.status_code)


if __name__ == '__main__':
main()

ive使用机械汤尝试了另一种,但仍然返回null

ive tried another one using Mechanical soup but still it returns a null

import argparse
import mechanicalsoup
import urllib.request
from bs4 import BeautifulSoup

parser = argparse.ArgumentParser(description='Login to GitHub.')
parser.add_argument("username")
parser.add_argument("password")
args = parser.parse_args()

browser = mechanicalsoup.Browser()

login_page = browser.get("http://www.reginaandrew.com/gold-leaf-glass-top-table")
login_form = login_page.soup.select("#login-form")[0]


login_form.input({"login[username]": args.username, "login[password]": args.password})


page2 = browser.submit(login_form,login_page.url )
messages = page2.soup.find(class_='in-stock1')
if messages:
    print(messages.text)

print(page2.soup.title.text)

我更好地了解了最佳解决方案,因此id希望使用该解决方案,但是我有什么想念的吗? (我肯定我很想念)

I understand the top solution better so id like to do it using that but is there anything I'm missing? (I'm sure I'm missing a lot)

推荐答案

这应该做到

import requests
import re

url = "http://www.reginaandrew.com/"
r = requests.session()
rs = r.get(url)
cut = re.search(r'<form.+?id="login-form".+?<\/form>', rs.text, re.S|re.I).group()
action = re.search(r'action="(.+?)"', cut).group(1)
form_key = re.search(r'name="form_key".+?value="(.+?)"', cut).group(1)
payload = {
    "login[username]": "fugees",
    "login[password]": "nugees",
    "form_key": form_key,
    "persistent_remember_me": "on"
}
rs = r.post(action, data=payload, headers={'Referer':url})

这篇关于使用请求登录网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆