Zichenya 发表于 2022-6-18 23:50:42

求助一下,爬虫问题!!!

有个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也都会失效。

suchocolate 发表于 2022-6-19 13:21:04


在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。

南归 发表于 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) #获取_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")) #获取签到结果

Zichenya 发表于 2022-6-19 16:29:13

suchocolate 发表于 2022-6-19 13:21
在登录的时候分发,所以这个得用requests.session,先登录获取cookie,然后再签到。

牛逼!!!!

Zichenya 发表于 2022-6-19 16:29:55

南归 发表于 2022-6-19 16:13


牛牛牛!!!!不然我都准备用selenium做了

Zichenya 发表于 2022-6-19 19:56:05

南归 发表于 2022-6-19 16:13


为什么首页源码里面会有这个_wpnonce值????
能解答一下?

南归 发表于 2022-6-19 20:48:11

Zichenya 发表于 2022-6-19 19:56
为什么首页源码里面会有这个_wpnonce值????
能解答一下?

不知道

Zichenya 发表于 2022-6-19 21:37:20

南归 发表于 2022-6-19 20:48
不知道

那你怎么知道在首页能找到这个值?

南归 发表于 2022-6-19 21:41:13

搜索wpnonce就在源码找到了

Zichenya 发表于 2022-6-19 21:52:12

南归 发表于 2022-6-19 21:41
搜索wpnonce就在源码找到了

好吧,看来是有经验的!牛逼

南归 发表于 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/@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]
查看完整版本: 求助一下,爬虫问题!!!