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

爬虫模拟登陆时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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效