求助一下,爬虫问题!!!
有个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也都会失效。
在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。
本帖最后由 南归 于 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) #获取_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)
print(sign_message.encode().decode("unicode-escape")) #获取签到结果
suchocolate 发表于 2022-6-19 13:21
在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。
牛逼!!!! 南归 发表于 2022-6-19 16:13
牛牛牛!!!!不然我都准备用selenium做了 南归 发表于 2022-6-19 16:13
为什么首页源码里面会有这个_wpnonce值????
能解答一下?
Zichenya 发表于 2022-6-19 19:56
为什么首页源码里面会有这个_wpnonce值????
能解答一下?
不知道 南归 发表于 2022-6-19 20:48
不知道
那你怎么知道在首页能找到这个值? 搜索wpnonce就在源码找到了 南归 发表于 2022-6-19 21:41
搜索wpnonce就在源码找到了
好吧,看来是有经验的!牛逼
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/@value')
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)
# 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)
print(sign_message.encode().decode("unicode-escape"))
因为nonce也在变,所以修改代码先获取nonce,再获取wpnonce,应该没问题了
页:
[1]