鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 10

[已解决]求助一下,爬虫问题!!!

[复制链接]
发表于 2022-6-18 23:50:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有个wordpress做的网站,我想用python做一个自动签到脚本
抓包发现请求体里边有个wpn-once参数(带有效期,随机值)
代码如图
怎么解决才能正常的签到呢

可能是这个参数的介绍


面由WordPress教程栏目给大家介绍关于WordPress中的Nonce,希望对需要的朋友有所帮助!
WordPress中的Nonce

Nonce是number used once的缩写,Wordpress的nonce不是数字,而一是串由数字和字符组成的Hash值,不仅只能使用一次,还同时具有生命周期(lifetime),在生命周期内,针对每个用户,同样的参数会生成同样的nonce值,直到生命周期结束。这篇文章我们就来介绍一下如何用Nonce来防止CSRF攻击。

创建一个Nonce

Nonce可以被放在Url请求中,也可以放在一个Form的Hidden元素中,然后在Ajax请求时,通过Javascript来获取他它。一个Nonce生命周期只在当前Session中,如果你退出登录后再次登录,之前的nonce也都会失效。
最佳答案
2022-6-19 16:13:53
本帖最后由 南归 于 2022-6-19 16:15 编辑
import requests
import re

session = requests.session()
url = "https://m.wugif.com/api/v1/session"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"
}
data = {"user_login": "此处填账号", "password": "此处填密码", "nonce": "8b9e162efb"}

response = session.post(url=url, headers=headers, data=data) #登录
response_1 = session.get(url="https://m.wugif.com/", headers=headers).text
_wpnonce = re.findall(r'_wpnonce":"(.*?)"}', response_1)[0] #获取_wpnonce
# print(_wpnonce)
sign_data = {"_wpnonce": _wpnonce}
response_2 = session.post(
    url="https://m.wugif.com/api/v1/actions/daily_sign", headers=headers, data=sign_data
) #签到

sign_message = re.findall(r'"message":"(.*?)","', response_2.text)[0]
print(sign_message.encode().decode("unicode-escape")) #获取签到结果
QQ图片20220616175008.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-19 13:21:04 | 显示全部楼层
2022-06-19 12_52_07-蛋蛋gif图解 - 污趣动态图.png
在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-19 16:13:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 南归 于 2022-6-19 16:15 编辑
import requests
import re

session = requests.session()
url = "https://m.wugif.com/api/v1/session"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"
}
data = {"user_login": "此处填账号", "password": "此处填密码", "nonce": "8b9e162efb"}

response = session.post(url=url, headers=headers, data=data) #登录
response_1 = session.get(url="https://m.wugif.com/", headers=headers).text
_wpnonce = re.findall(r'_wpnonce":"(.*?)"}', response_1)[0] #获取_wpnonce
# print(_wpnonce)
sign_data = {"_wpnonce": _wpnonce}
response_2 = session.post(
    url="https://m.wugif.com/api/v1/actions/daily_sign", headers=headers, data=sign_data
) #签到

sign_message = re.findall(r'"message":"(.*?)","', response_2.text)[0]
print(sign_message.encode().decode("unicode-escape")) #获取签到结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-19 16:29:13 From FishC Mobile | 显示全部楼层
suchocolate 发表于 2022-6-19 13:21
在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。

牛逼!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-19 16:29:55 From FishC Mobile | 显示全部楼层
南归 发表于 2022-6-19 16:13

牛牛牛!!!!不然我都准备用selenium做了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-19 19:56:05 | 显示全部楼层

为什么首页源码里面会有这个_wpnonce值????
能解答一下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-19 20:48:11 | 显示全部楼层
Zichenya 发表于 2022-6-19 19:56
为什么首页源码里面会有这个_wpnonce值????
能解答一下?

不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-19 21:37:20 From FishC Mobile | 显示全部楼层
南归 发表于 2022-6-19 20:48
不知道

那你怎么知道在首页能找到这个值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-19 21:41:13 | 显示全部楼层
搜索wpnonce就在源码找到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-19 21:52:12 From FishC Mobile | 显示全部楼层
南归 发表于 2022-6-19 21:41
搜索wpnonce就在源码找到了

好吧,看来是有经验的!牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-20 21:16:26 | 显示全部楼层
import requests
import re
from lxml import etree


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"
}
response = requests.get("https://m.wugif.com/", headers=headers)
selector = etree.HTML(response.text)
nonce = selector.xpath('//*[@id="modalSignBox"]/form/input[3]/@value')[0]
print(nonce)

session = requests.session()
url = "https://m.wugif.com/api/v1/session"

data = {"user_login": "此处填账号", "password": "此处填密码", "nonce": nonce}

response_0 = session.post(url=url, headers=headers, data=data)
response_1 = session.get(url="https://m.wugif.com/", headers=headers).text
_wpnonce = re.findall(r'_wpnonce":"(.*?)"}', response_1)[0]
# print(_wpnonce)
sign_data = {"_wpnonce": _wpnonce}
response_2 = session.post(
    url="https://m.wugif.com/api/v1/actions/daily_sign", headers=headers, data=sign_data
)
# print(response_2.text)
sign_message = re.findall(r'"message":"(.*?)"', response_2.text)[0]
print(sign_message.encode().decode("unicode-escape"))
因为nonce也在变,所以修改代码先获取nonce,再获取wpnonce,应该没问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表