requests实现系统模拟登录

news2024/12/23 9:13:10

文章目录

  • requests模拟登录
  • QWebEngine登录
  • 存储数据
  • PySide2使用QWebEngineView报错extension_system_qt.cpp(122) failed to parse extension manifest

requests模拟登录

  1. 使用requests发送post请求;
  2. 获取响应头中的Set-Cookie的值;
  3. 将该Cookie值存入浏览器对应的域名,测试是否可用。
    可以使用
import requests


url = "http://localhost:5050/login/"


def login(url, headers, data):
    res = requests.post(url, headers=headers, data=data)
    print("response code:", res.status_code)
    print("content:", res.headers)


if __name__ == "__main__":

    """
    Host: localhost:5050

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36

    Accept-Encoding: gzip, deflate, br

    Accept: */*

    Connection: keep-alive

    Cookie: session=.eJwlzjESAjEIAMC_UFsAISTcZ25CCKPtnVc5_l0d6232BXse67zD9jyudYP9EbCBG3qMoDGVSZYP0mjGJZ0Kkk0tTYh6IrNzuqvFIEK1ZKKhOdVqGV1EqIi1iVHcrGFG7yqNf0S8ljSUrDpYxdKnYmKN7gbfyHWu478heH8Ad3suDA.ZEU0hw.5N9yfwPep8tDGT-Y9wxfLXR3Ohw
    
    """
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",

    }
    data = {
        "username": "admin",
        "password": "admin"
    }

    login(url, headers, data=data)

QWebEngine登录

将以上获取的Cookie信息,设置QWebEngine的cookie,实现模拟登录。

# __author__ = "laufing"
# class_based_qt
# laufing_qt
import sys
import time

import sys
from urllib.parse import urlparse
from PySide2.QtWidgets import *
from PySide2.QtCore import *   # QByteArray
from PySide2.QtGui import *
from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PySide2.QtWebEngineCore import QWebEngineHttpRequest, QWebEngineCookieStore
from PySide2.QtNetwork import QNetworkCookie


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        # 窗口标题
        self.setWindowTitle("laufing[*]")
        # 窗口图标
        pixmap = QPixmap("./imgs/dog.jpg").scaled(50, 50)
        icon = QIcon(pixmap)
        # icon.addPixmap(pixmap, QIcon.Normal, QIcon.Off)
        self.setWindowIcon(icon)

        # 设置宽高
        self.resize(900, 800)

        # 窗口居中
        desktop_geo = QDesktopWidget().geometry()
        width, height = desktop_geo.width(), desktop_geo.height()
        self.move(width / 2 - self.width() / 2, height / 2 - self.height() / 2)


        # 设置文本
        self.label = QLabel(self)
        self.label.setText("测试按钮被按下")
        self.label.resize(200, 200)
        self.label.move(100, 100)

        self.setUI()

    def setUI(self):
        # 实例化浏览器引擎视图
        self.web_view = QWebEngineView(self)
        self.web_view.setFixedWidth(900)
        self.web_view.setFixedHeight(800)

        # 创建http请求
        self.req = QWebEngineHttpRequest()
        # 设置请求的url
        self.url = url = "http://localhost:5050/chart/add"
        # 解析url
        parsed_url = urlparse(url)
        self.domain = parsed_url.scheme + "://" + parsed_url.netloc
        #  ParseResult(scheme='http', netloc='localhost:5050', path='', params='', query='', fragment='')
        # parsed_url.scheme  获取协议
        # parsed_url.netloc 获取域名
        self.req.setUrl(QUrl(url))  # 请求对象设置url

        # 设置cookie
        self.set_cookie()
        # 浏览器引擎  加载请求对象 or QUrl
        self.web_view.page().load(self.req)

    def set_cookie(self, cookie=None):
        # cookie
        cookie = "session=.eJwlzjEOwjAMQNG7ZGawHdeJuQyKY1sgVSC1MCHuThHj01_-u1xyi_1azs_tFadyuXk5F1MwH45jCiGHDRRvSjUNK6BOqY0RewKRUZqJ-kAE0STEITlFlzo6M2NlbRO8mmqD9N6FG_0SUgQ34FxkkLCmTYGExbtpOUZee2z_Gzy4PuZY40Dcy-cLGa8yPQ.ZEU0jA.XhyzfsXhTxQC0j0UmphlC8nRe5Q"
        # 解析cookie 并导入
        cookie_dict = self.parse_cookie(cookie)
        for key, value in cookie_dict.items():
            # 生成单个cookie
            key_bytes = QByteArray(key.encode())
            val_bytes = QByteArray(value.encode())
            cookie_str = QNetworkCookie(key_bytes, val_bytes)
            print("cookie:", cookie_str)
            # 设置cookie 及 对应的网站域名
            self.web_view.page().profile().cookieStore().setCookie(cookie_str, self.domain)

        # 设置cookie持久化
        self.web_view.page().profile().setPersistentCookiesPolicy(
            QWebEngineProfile.PersistentCookiesPolicy.AllowPersistentCookies)

    def parse_cookie(self, cookie_str):
        """解析cookie"""
        c_list = cookie_str.split(";")
        c_dict = dict()
        for i in c_list:
            key, val = i.split('=')
            c_dict[key] = val
        return c_dict


"""
	# 也可以如下设置:
	my_cookie = QNetworkCookie()
	my_cookie.setName(key.encode())
	my_cookie.setValue(values.encode())
	my_cookie.setDomain('xx.xx.com')
	xxx.setCookie(c, domain)
"""

if __name__ == '__main__':

    # 窗口应用程序
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    status_code = app.exec_()
    sys.exit(status_code)

存储数据

  1. 程序自己存入db
  2. 爬虫请求api 添加数据集(表名信息)

# GET
url2 = "http://localhost:5050/explore/"
headers = {
    "Host": "localhost:5050",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept": "*/*",
    "Connection": "keep-alive",
    "Cookie": "session=.eJwlzjEOwjAMQNG7ZGawHdeJuQyKY1sgVSC1MCHuThHj01_-u1xyi_1azs_tFadyuXk5F1MwH45jCiGHDRRvSjUNK6BOqY0RewKRUZqJ-kAE0STEITlFlzo6M2NlbRO8mmqD9N6FG_0SUgQ34FxkkLCmTYGExbtpOUZee2z_Gzy4PuZY40Dcy-cLGa8yPQ.ZEU0jA.XhyzfsXhTxQC0j0UmphlC8nRe5Q"
}
params = {
    "form_data_key": "jiB0jEm4eDbdMs0cbkkT6d4aPUOm5NYKShbl0664CYXkuiNYPOutF626jTwTkucO",
    "datasource_type": "table",
    "datasource_id": 3
}
def get_dataset(url, headers, params):
    res = requests.get(url, headers=headers, params=params)
    print("响应状态:", res.status_code)
    print("响应的数据:", res.text)


# 删除
# http://localhost:5050/api/v1/dataset/
# ?q=(order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:25)


# 添加dataset
add_url = "http://localhost:5050/api/v1/dataset/"
# post
payload = {
    "database": 1,  # 自身数据库
    "schema": "superset",
    "table_name": "ttt"  # 表名
    }

def add_dataset(url, headers, data):
    res = requests.post(url, headers=headers, json=data) # 服务端要求json格式
    print("add response:", res.status_code)


if __name__ == "__main__":

    """
    请求头
    Host: localhost:5050

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36

    Accept-Encoding: gzip, deflate, br

    Accept: */*

    Connection: keep-alive

    Cookie: session=.eJwlzjESAjEIAMC_UFsAISTcZ25CCKPtnVc5_l0d6232BXse67zD9jyudYP9EbCBG3qMoDGVSZYP0mjGJZ0Kkk0tTYh6IrNzuqvFIEK1ZKKhOdVqGV1EqIi1iVHcrGFG7yqNf0S8ljSUrDpYxdKnYmKN7gbfyHWu478heH8Ad3suDA.ZEU0hw.5N9yfwPep8tDGT-Y9wxfLXR3Ohw
    
    """
    # 添加数据到tables中(自己添加不行,uuid无法给值)
    add_dataset(add_url, headers=headers, data=payload)

 
 

PySide2使用QWebEngineView报错extension_system_qt.cpp(122) failed to parse extension manifest

删除anaconda目录下的qt.conf
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像ROI与mask掩码与图像几何变换

图像ROI与mask掩码与图像几何变换 感兴趣区域ROI: ⚫ ROI—(region of interest)—感兴趣区域 ⚫ 形状可有矩形,圆形,椭圆形等 ⚫ 能够确定分析重点,减少处理时间,提高精度 使用Rect起点终点范围 示例代码: import…

条码控件Aspose.BarCode入门教程(8):C#从图像中读取条形码

Aspose.BarCode for .NET 是一个功能强大的API,可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能,以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API支持流行文件格式处理&am…

【对话ChatGPT】如何看待java行业内卷的问题?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:ccLoveStudy 当今大环境,编程行业火热,而java行业更是首当其冲,但是为此&#xff0…

( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】

知识点回顾 : Trie,又称前缀树或字典树,用于判断字符串是否存在或者是否具有某种字符串前缀。 ❓208. 实现 Trie (前缀树) 难度:中等 Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构&#xff…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析实践应用

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、…

SequoiaDB分布式数据库2023.3月刊

本月看点速览 赋能行业,参编《分布式数据库金融应用发展报告》 脱颖而出,入选2022专精特新黑马大赛年度十强 激烈角逐,成功晋级全国信创优秀解决方案决赛 新穗新彩,多家权威媒体走进巨杉 青杉计划2023持续进行,一起…

Java中字符串的初始化详解

前言 在深入学习字符串类之前,我们先搞懂JVM是怎样处理新生字符串的。当你知道字符串的初始化细节后,再去写String s "hello"或String s new String("hello")等代码时,就能做到心中有数。 首先得搞懂字符串常量池的概…

【流畅的Python学习笔记】2023.4.24

此栏目记录我学习《流畅的Python》一书的学习笔记,这是一个自用笔记,所以写的比较随意,随缘更新 用bisect来管理已排序的序列 bisect 模块包含两个主要函数,bisect 和 insort,两个函数都利用二分查找算法来在有序序列…

【Golang开发入门】你会真的会用Go写“Hello world“吗?

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Go语言核心编程近期目标:写好专栏的每一篇文章 目录 一、Go项…

Linux下版本控制器(SVN) -命令行客户端

文章目录 进阶知识-Linux下版本控制器(SVN)5、命令行客户端5.1 创建两个工作区目录模拟两个开发人员5.2 检出5.3 添加5.4 提交5.5 查看服务器端文件内容5.6 更新操作5.7 冲突5.7.1 过时的文件5.7.2 冲突的产生5.7.3 冲突的表现5.7.4 冲突的手动解决5.7.5 冲突的半自动解决5.7.6…

ERTEC200P-2 PROFINET设备完全开发手册(10)

10. 固化程序 固件在SPI Flash的结构 由于绝大多数的设计都是使用SPI Flash,因此这里只介绍SPI Flash的烧写。ERTEC200P-2的固件在SPI Flash中的Layout如下图所示: 其中ROM Header:格式如下图所示: Firmware Binary: 协议栈固件…

【TypeScript】TS中type和interface在类型声明时的区别

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料可以找我免…

RxJava中DISPOSED状态的被观察者任务执行onError/onSuccess导致的崩溃问题

RxJava中写了doOnError但还是导致应用崩溃问题记录 一、问题背景1.1 崩溃堆栈1.2 写demo代码复现相同逻辑 二、问题等价还原-复现2.1 代码位置:io.reactivex.internal.operators.single.SingleCreate.Emitter#onError 三、修复方法3.1 方案一:设置全局的…

springboot +flowable,处理 flowable 的用户和用户组(二)

一.简介 对于flowable是什么以及关于此框架的具体信息可以参看此项目的官方文档:https://www.flowable.org/docs/userguide/index.html Flowable is a light-weight business process engine written in Java.这是官网文档对此框架的完美解释:Flowable…

4·26世界知识产权日,Adobe助力认知和解决知识产权的那些事

2023年是中国与世界知识产权组织(WIPO)合作50周年,在第23个世界知识产权日来临之际(每年4月26日定为世界知识产权日),让我们先来了解一下知识产权的相关知识吧! ①“知识产权”的定义是什么? 知识产权是指…

FVM初启,Filecoin生态爆发着力点在哪?

Filecoin 小高潮 2023年初,Filecoin发文分享了今年的三项重大变更,分别是FVM、数据计算和检索市场的更新,这些更新消息在发布后迅速吸引了市场的广泛关注。 特别是在3月14日,Filecoin正式推出了FVM,这一变革使得File…

对比度亮度调整与通道分离合并

对比度亮度调整与通道分离合并 对比度亮度调整: 1)原理介绍: g’ g * Mult Add ⚫ g 表示原图像像素 ⚫ g’ 表示输出图像像素 ⚫ Mult 被称为增益(gain), 通常用来控制图像的对比度 ⚫ Add 通常被称为偏置(bias), 通常用来控制图像的亮度 g’(i,j) Mult * g(i,j) Add …

九龙证券|两日连涨,猪价或见底!二季度末生猪养殖有望扭亏为盈

猪肉产品质量和价格涨跌备受商场重视。 猪肉指数接连下行 4月20日,A股大盘全天弱势。猪肉指数继续下行,收跌0.65%。成份股中,仅新五丰、温氏股份等上涨,大多个股录得跌落。天域生态跌4.46%,海大集团、禾丰股份跌逾3%。…

Ubuntu 20.04 安装 Latex 并使用 vscode 作为文本编辑器

Ubuntu 20.04 安装 Latex 并使用 vscode 作为文本编辑器 1 Texlive 下载与安装1.1 镜像文件下载1.2 安装步骤1.3 查看是否安装成功1.4 相关依赖安装 2 安装 windows 字体3 vscode 编辑与编译环境配置3.1 vscode 安装3.2 编辑相关插件安装3.3 编译环境配置附录: 因为…

【Redis】Redis持久化

介绍 ​ Redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。Redis提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Append Only File)。 ​ 既然redis的数据可以保存在磁盘上&…