gpt4 book ai didi

python - 使用 Python 登录一个棘手的网站

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:54 25 4
gpt4 key购买 nike

我是一名数据分析师,从事数字营销工作。我的部门使用第三方来帮助吸引更多客户。这些第三方中的每一个都有一个网站,他们可以在网站上显示他们为我们公司带来了多少客户。我的部分工作是从每个网站收集数据并将它们放入报告中,这是一个漫长的手动过程。到目前为止,我已经成功登录到我们的一些第三方网站并提取了一些数据。但是,有一个网站我在登录时遇到了一些问题... https://inspire.flg360.co.uk/SignIn.php 。我还需要将 session 重定向到另一个 URL 以从中抓取数据。

我已经编写了一些代码,这些代码已成功登录到我需要从中获取信息的不同网站。

import requests
from bs4 import BeautifulSoup
import re

username = 'username'
password = 'password'
scrape_url = 'https://portal.mvfglobal.com/index.php/dashboard'

login_url = 'https://portal.mvfglobal.com/index.php/login/login'
login_info = {'login_name': username, 'login_pass': password}

#Start session.
session = requests.session()

#Login using your authentication information.
session.post(url=login_url, data=login_info)

#Request page you want to scrape.
url = session.get(url=scrape_url)

soup = BeautifulSoup(url.content, 'html.parser')

print(soup)

但是,当我尝试登录 https://inspire.flg360.co.uk/SignIn.php 使用相同的方法我遇到了一些问题。

import requests
from bs4 import BeautifulSoup

username = 'username'
password = 'password'
login_url = 'https://inspire.flg360.co.uk/SignIn.php'
login_info = {'strEmail': username, 'strPassword': password}

scrape_url = 'https://inspire.flg360.co.uk/AuthUser.php'

#Start session.
session = requests.session()
#Login using your authentication information.
session.post(url=login_url, data=login_info)
#Request page you want to scrape.
url = session.get(url=scrape_url)

soup = BeautifulSoup(url.content, 'html.parser')

print(soup)

当我检查页面元素时,我注意到 302 响应重定向到 https://inspire.flg360.co.uk/AuthUser.php .但是,当我尝试使用上面的代码登录时,我仍然遇到错误。

我完全不知所措?

最终代码如下__________________________________________________________________

import requests
from bs4 import BeautifulSoup
import hashlib

username = 'username'
password = 'password'
login_url = 'https://inspire.flg360.co.uk/AuthUser.php'
login_info = {"strForwardURL": "",
"strEmail": username,
"intRememberMe": 1,
"strResponse": ""}

scrape_url = 'https://inspire.flg360.co.uk/ma/index.php'

# Start session.
session = requests.session()

# Get strResponse
strc = session.get(url=login_url)
strc = BeautifulSoup(strc.content, 'html.parser').findAll(attrs={"name": "strChallenge"})[0]['value']
strc_joined = strc + hashlib.md5(password.encode("utf-8")).hexdigest()
strresponse = hashlib.md5(strc_joined.encode("utf-8")).hexdigest()
login_info['strResponse'] = strresponse

#Login using your authentication information.
session.post(url=login_url, data=login_info)

# Request page you want to scrape.
url = session.get(url=scrape_url)

soup = BeautifulSoup(url.content, 'html.parser')

print(soup)

最佳答案

它看起来像是页面在 https://inspire.flg360.co.uk/SignIn.php 发送的实际 POST 请求还有一些必需的元素。也就是说,POST 数据实际上看起来像这样:

strForwardURL=&strEmail=abc%40123.com&intRememberMe=1&strResponse=fdb4c46c5d0eeab6133be193afc7897e

这些字段是strForwardURLstrEmailintRememberMestrResponse。查看页面上的其余代码,当您单击提交按钮时,它会触发页面上的这段 javascript:

    function fncSignIn() {

var loginForm = document.getElementById("signinForm");

if (loginForm.strEmail.value == "") {

alert("Please enter your email address.");
return false;

}

if (loginForm.strPassword.value == "") {

alert("Please enter your password.");
return false;

}

var submitForm = document.getElementById("submitForm");

submitForm.strEmail.value = loginForm.strEmail.value;
if (loginForm.intRememberMe.checked) submitForm.intRememberMe.value = 1;
submitForm.strResponse.value = hex_md5(loginForm.strChallenge.value+hex_md5(loginForm.strPassword.value));

submitForm.submit();

}

在页面的其他地方,您可以在此处找到 strChallenge 字符串:

<input type="hidden" name="strChallenge" value="1d989603e448a1a0559f08bdc83a15522fbc6c0404ca66acc4cdd7aafe4039359e2fb23b706d60a3">

(顺便说一句,这个值在重新加载时改变)

本质上,它不是字符串形式的密码,而是要求 strChallenge 字符串的 md5 十六进制摘要与密码的 md5 十六进制摘要相结合。

在 python 中,它会是这样的:

import hashlib
password = "abcdefg12345"
strc = "1d989603e448a1a0559f08bdc83a15522fbc6c0404ca66acc4cdd7aafe4039359e2fb23b706d60a3"
strc_joined = strc + hashlib.md5(password.encode("utf-8")).hexdigest()
strresponse = hashlib.md5(strc_joined.encode("utf-8")).hexdigest()
print(strresponse)

本例中的输出为 0d289f39067a25430d4818fe38046372

将您原始请求中的 postdata 制作成:

{"strForwardURL":"", "strEmail":"abc@123.com", "intRememberMe": 1, "strResponse": "0d289f39067a25430d4818fe38046372"} 你应该能够每次你想抓取一个需要这个特定登录的页面时,你应该能够简单地使用 BeautifulSoup4 获取 strChallenge,计算正确的 strResponse,然后登录中。

关于python - 使用 Python 登录一个棘手的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com