首页 > 编程语言 >python 模拟登录问题

python 模拟登录问题

时间:2024-11-08 22:42:02浏览次数:1  
标签:登录 python gushiwen 验证码 print login data response 模拟

`# 模拟古诗文网的登录
import requests
from datetime import datetime
from lxml import etree
import base64
import time

login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
requestLoginUrl = r"https://so.gushiwen.org/user/login.aspx"
prefixCode = r"https://www.gushiwen.cn/"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
randomFactor = str(datetime.timestamp(datetime.today())).split(".")[1]

def login() ->str:
session = requests.Session()

response = session.get(login_url, headers= header).text
tree = etree.HTML(response)
codeSuffix = tree.xpath('//*[@id="imgCode"]/@src')[0]
codeByteData = session.get('https://so.gushiwen.cn/'+codeSuffix, headers=header).content
codeImageABS = "G:/shark_net/img/{0}.jpg".format(randomFactor)
view_state = str(tree.xpath('//input[@name="__VIEWSTATE"]/@value')[0])
viewstategeneral = str(tree.xpath('//input[@name="__VIEWSTATEGENERATOR"]/@value')[0])

# b = base64.b64decode(codeByteData.decode)
# print(type(b))
# with open()

# 验证码可以不进行存储,而是直接进行识别,其实也可以进行验证码图片的备份或者其他用途
# !!!验证码的识别接口,需要将验证码图片转换为 二进制base64字符串, 可优化: 无需进行验证码存储,而直接转换给接口调用
with open(codeImageABS, mode="wb") as inf:
    inf.write(codeByteData)

with open(codeImageABS, 'rb') as f:
    b = base64.b64encode(f.read()).decode()  ## 图片二进制流base64字符串

# 验证码接口:验证码识别
url = "http://api.jfbym.com/api/YmServer/customApi"
data = {
    # 关于参数,一般来说有3个;不同类型id可能有不同的参数个数和参数名,找客服获取
    "token": "mZv2dZmAAmVJblLUC7MGVf4WoEOAB2gAzhL7ahtopAY",
    "type": "10103",
    "image": b
}
_headers = {
    "Content-Type": "application/json"
}
response = session.request("POST", url, headers=_headers, json=data).json()
# print(codeImageABS)
# print(response)
print(response)
# return response["data"]["data"]
codeText = str(response["data"]["data"])
print(codeText)
data = {
    "__VIEWSTATE":view_state,
    "__VIEWSTATEGENERATOR":viewstategeneral,
    "from":"https://www.gushiwen.cn/user/login.aspx",
    "email":"????",
    "pwd":"???",
    "code":codeText,
    "denglu":"登录"
}

response = session.post(url= requestLoginUrl, headers= header, data= data)

print(response.status_code)
print(data)
loginPageText = response.text

with open("gushiwen.html", "w", encoding= "utf-8") as f:
    f.write(loginPageText)

if name=="main":
login()
print("验证码图片文件:", randomFactor)
`

以上为全局coding, 但是打印登录后的页面会出现错误 “ (需启用cookie保存登录状态) ”,
还请大佬答疑,问题在哪?

标签:登录,python,gushiwen,验证码,print,login,data,response,模拟
From: https://www.cnblogs.com/hualinLai/p/18536069

相关文章

  • 鸿蒙开发进阶(OpenHarmony)DAC模拟信号
    鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)功能简介......
  • 【题解】「NOIP2024模拟赛24 T3」钙绿
    【题解】「NOIP2024模拟赛24T3」钙绿https://www.becoder.com.cn/contest/5715/problem/3\(\mathcal{Description}\)给定\(n,p,m\)。对于每个\(k=0,1,\dots,m\),统计满足下面条件的\(n\)位\(10\)进制数:(允许前导零各位数之和不超过\(k\)。\(p\)能整除这个数。数据......
  • python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容高校校园线上跳蚤市场的系统设计-内容说明一、选题背景随着互联网技术的发展,线上交易模式日益普及。关于跳蚤市场的研究,现有研究主要以线下跳蚤......
  • 测试平台开发(一)鉴权模块5 用户登录与异常拦截
    一、定义异常类型使用以下代码定义了ServiceException,集成了RuntimException,用于在系统中捕捉和返回异常信息。@Data@Slf4jpublicclassServiceExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=12345678123456L;privateInt......
  • 20241107全国计算机二级Python优秀过级(大头博士计算二级)
    2024年11月7日今天全国计算机二级可以查分了,并下载证书了全国计算机等级考试(NCRE)成绩查询-中国教育考试网查看证书下载证书拿了一张200g的白色卡纸正反打印正反打印,机器有点走墨,晕开了,算了,反正有电子证,打印一张是留着备用的这张证书不能抵扣个人所得税,所以......
  • # python # 可视化窗口 # 可应用与爬虫 # tkinter
    具有功能:创建窗口,监听窗口(可自定义打印图片-选项-按键)所需工具:pycham所需库:tkinter代码讲解:1.导入库-创建窗口-设置窗口大小-设置标题importtkinterastk#创建一个窗口root=tk.Tk()#设置窗口大小root.geometry("800x400+400+200")#注意这里使用的是英文字......
  • 学习日志007--python函数 学完再练习练
    一、函数的概念1.定义函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。2.作用函数能提高应用的模块性,和代码的重复利用率3.定义函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用......
  • 【题解】「NOIP2024模拟赛24 T2」子序列们
    【题解】「NOIP2024模拟赛24T2」子序列们https://www.becoder.com.cn/contest/5715/problem/2\(\mathcal{Description}\)给定一个0/1串\(a\),你需要生成一个长度为\(n\)的序列\(b\),其中\(b_i\)为\(a\)的一个子序列,且满足:\(|b_i|=n-i+1\);\(\foralli\in(1,n]\),\(b......
  • 11.8模拟赛总结
    赛时T1想如果某一行和某一列的最大值相同的话,这个数的位置就可以确定了,但如果一个数只作为某一行的最大值出现了一次,那它所在的列就一定有一个比它大的,所以考虑从大到小往矩形里放数,记录有几列已经放过数字了,那这个数就可以在这几列中任选一列,即\(ans\)乘上放过数的列的个数,赛......
  • python篇:0基础带你入门python之元组集合字典
    一、元组Python中的元组(`tuple`)是一种有序、不可变的集合数据类型。与列表(`list`)类似,元组用于存储多个元素,但一旦创建,它的内容不能修改。元组使用圆括号`()`来定义。1.元组的定义元组可以通过圆括号`()`来定义,也可以省略括号,直接通过逗号分隔元素。示例:#使用圆括......