dwcookies 2022-10-12 16:21 采纳率: 100%
浏览 122
已结题

爬虫模拟登陆时discuz论坛拒绝访问

问题遇到的现象和发生背景

在使用python爬虫模拟登陆糖果vr网站时,出现了discuz!错误:您当前的访问请求当中含有非法字符,已经被系统拒绝。
(headers和data除了cookie以外已经尽量使用我自己访问的数据了)

用代码块功能插入代码,请勿粘贴截图
import requests
import ddddocr
import re
from lxml import etree

if __name__ == "__main__":
    session = requests.Session()
    url = 'https://www.tangguo2.com/member.php?mod=logging&action=login'
    loginUrl = 'https://www.tangguo2.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LgS81&inajax=1'
    mainUrl = 'https://www.tangguo2.com/plugin.php?id=dsu_paulsign:sign'
    headers = {
        'User-Agent':此处本来为我的UA(保密一下)
    }
    mainResponce = requests.get(url, headers=headers).text
    # print(mainResponce)
    tree = etree.HTML(mainResponce)
    formHash = tree.xpath('/html/body/div[5]/div[1]/div/div[3]/div/form/input[2]/@value')[0]

    jpgUrl = tree.xpath('/html/body/div[7]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/span/@id')[0]
    jpgName = re.findall('seccode_(.*)', jpgUrl)[0]
    headers1 = {
        'User-Agent':我的UA,
        'referer': 'https://www.tangguo2.com/member.php?mod=logging&action=login',
        'sec-fetch-dest': 'image',
        'sec-fetch-mode': 'no-cors',
        'sec-fetch-site': 'same-origin',
        'authority': 'www.tangguo2.com',
        'method': 'GET',
        'scheme': 'https',
        'accept': 'image/webp,image/apng,image/*,*/*;q = 0.8',
        'accept-encoding': 'gzip,deflate,br',
        'accept-language': 'zh-CN,zh;q=0.9',
    }
    jpgUrl = 'https://www.tangguo2.com/misc.php?mod=seccode&update=76180&idhash=' + jpgName
    jpgResponce = requests.get(jpgUrl, headers=headers1).content
    ocr = ddddocr.DdddOcr(old=True)
    with open('seccode.jpg', 'wb') as fp:
        fp.write(jpgResponce)
    image = jpgResponce
    image_result = ocr.classification(image)
    loginHeaders = {
        'authority': 'www.tangguo2.com',
        'method': 'POST',
        'path': '/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LmzaO&inajax=1',
        'scheme':'https',
        'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-encoding':'gzip,deflate,br',
        'accept-language':'zh-CN,zh;q=0.9',
        'cache-control': 'max-age=0',
        'content-length': '222',
        'content-type': 'application/x-www-form-urlencoded',
        'origin': 'https://www.tangguo2.com',
        'referer': 'https://www.tangguo2.com/member.php?mod=logging&action=login',
        'sec-fetch-dest': 'iframe',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'User-Agent': 我的UA
    }
    data = {
        'formhash': formHash,
        'referer': 'https://www.tangguo2.com/forum.php',
        'loginfield': 'username',
        'username':原来为我的账户,
        'password':原来为我的密码,
        'questionid': '0',
        'answer':'',
        'seccodehash': jpgName,
        'seccodemodid': 'member::logging',
        'seccodeverify': image_result
    }

    loginResponce = session.post(loginUrl, headers=headers, data=data).text
    print(loginResponce)
    testXpath = '//*[@id="deanmembercontent"]/dl/dd[1]/a/text()'
    print(jpgName)
    print(image_result)

最后还有一些没写完,因为这个报错所以卡在这里了

运行结果及报错内容

验证码能够正确输出,账户和密码都是正确的。header和data也已经核对过了。
但是还是会出现错误:

Discuz! System Error

  • 您当前的访问请求当中含有非法字符,已经被系统拒绝
我的解答思路和尝试过的方法

验证码获取用了带带弟弟ocr,数据聚焦用了xpath,并用了正则做了一下数据解析
尝试过的方法就是让header和data尽量和我自己的一样,但还是没有
好像是discuz的防护机制,不知道还有没有什么办法

我想要达到的结果

希望能找到解决这个的办法(不觉得爬虫连个论坛都不能模拟登陆)

  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 专家修改了标签 10月18日
  • 已采纳回答 10月12日
  • 创建了问题 10月12日

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。