鱼C论坛

 找回密码
 立即注册
查看: 2177|回复: 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 编辑
  1. import requests
  2. import re

  3. session = requests.session()
  4. url = "https://m.wugif.com/api/v1/session"
  5. headers = {
  6.     "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"
  7. }
  8. data = {"user_login": "此处填账号", "password": "此处填密码", "nonce": "8b9e162efb"}

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

  17. sign_message = re.findall(r'"message":"(.*?)","', response_2.text)[0]
  18. print(sign_message.encode().decode("unicode-escape")) #获取签到结果
复制代码
QQ图片20220616175008.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

  3. session = requests.session()
  4. url = "https://m.wugif.com/api/v1/session"
  5. headers = {
  6.     "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"
  7. }
  8. data = {"user_login": "此处填账号", "password": "此处填密码", "nonce": "8b9e162efb"}

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

  17. sign_message = re.findall(r'"message":"(.*?)","', response_2.text)[0]
  18. print(sign_message.encode().decode("unicode-escape")) #获取签到结果
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

牛逼!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

牛牛牛!!!!不然我都准备用selenium做了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

为什么首页源码里面会有这个_wpnonce值????
能解答一下?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不知道
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那你怎么知道在首页能找到这个值?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-19 21:41:13 | 显示全部楼层
搜索wpnonce就在源码找到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧,看来是有经验的!牛逼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-20 21:16:26 | 显示全部楼层

  1. import requests
  2. import re
  3. from lxml import etree


  4. headers = {
  5.     "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"
  6. }
  7. response = requests.get("https://m.wugif.com/", headers=headers)
  8. selector = etree.HTML(response.text)
  9. nonce = selector.xpath('//*[@id="modalSignBox"]/form/input[3]/@value')[0]
  10. print(nonce)

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

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

  14. response_0 = session.post(url=url, headers=headers, data=data)
  15. response_1 = session.get(url="https://m.wugif.com/", headers=headers).text
  16. _wpnonce = re.findall(r'_wpnonce":"(.*?)"}', response_1)[0]
  17. # print(_wpnonce)
  18. sign_data = {"_wpnonce": _wpnonce}
  19. response_2 = session.post(
  20.     url="https://m.wugif.com/api/v1/actions/daily_sign", headers=headers, data=sign_data
  21. )
  22. # print(response_2.text)
  23. sign_message = re.findall(r'"message":"(.*?)"', response_2.text)[0]
  24. print(sign_message.encode().decode("unicode-escape"))
复制代码

因为nonce也在变,所以修改代码先获取nonce,再获取wpnonce,应该没问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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