pyqtQQ空间抢车位游戏自动停车

pyqt实现弹窗QQ空间,获取QQ抢车位cookies,并发生请求实现停车功能

由于打包后软件过大,所以我就只实现了一下功能,打算用c#重新写一遍并且完善功能

界面模块

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowModality(QtCore.Qt.WindowModal)
        MainWindow.setEnabled(True)
        MainWindow.resize(614, 718)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        MainWindow.setFont(font)
        MainWindow.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        MainWindow.setAnimated(False)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.login = QtWidgets.QPushButton(self.centralwidget)
        self.login.setGeometry(QtCore.QRect(0, 0, 71, 51))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.login.setFont(font)
        self.login.setObjectName("login")
        self.bag = QtWidgets.QPushButton(self.centralwidget)
        self.bag.setGeometry(QtCore.QRect(80, 0, 71, 51))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.bag.setFont(font)
        self.bag.setObjectName("bag")
        self.shop = QtWidgets.QPushButton(self.centralwidget)
        self.shop.setEnabled(True)
        self.shop.setGeometry(QtCore.QRect(240, 0, 71, 51))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.shop.setFont(font)
        self.shop.setObjectName("shop")
        self.all_car = QtWidgets.QPushButton(self.centralwidget)
        self.all_car.setGeometry(QtCore.QRect(160, 0, 71, 51))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.all_car.setFont(font)
        self.all_car.setObjectName("all_car")
        self.set = QtWidgets.QPushButton(self.centralwidget)
        self.set.setGeometry(QtCore.QRect(320, 0, 71, 51))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.set.setFont(font)
        self.set.setObjectName("set")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 550, 611, 171))
        self.frame.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.frame.setMouseTracking(False)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame.setLineWidth(4)
        self.frame.setMidLineWidth(4)
        self.frame.setObjectName("frame")
        self.shuchu = QtWidgets.QTextEdit(self.frame)
        self.shuchu.setGeometry(QtCore.QRect(0, 0, 611, 161))
        self.shuchu.setReadOnly(True)
        self.shuchu.setObjectName("plainTextEdit")
        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
        self.frame_2.setGeometry(QtCore.QRect(10, 70, 351, 241))
        self.frame_2.setAutoFillBackground(False)
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_2.setLineWidth(0)
        self.frame_2.setObjectName("frame_2")
        self.nicheng = QtWidgets.QLabel(self.frame_2)
        self.nicheng.setGeometry(QtCore.QRect(10, 10, 161, 16))
        self.nicheng.setTextFormat(QtCore.Qt.PlainText)
        self.nicheng.setObjectName("nicheng")
        self.jingyan = QtWidgets.QLabel(self.frame_2)
        self.jingyan.setGeometry(QtCore.QRect(10, 110, 171, 20))
        self.jingyan.setObjectName("jingyan")
        self.dengji = QtWidgets.QLabel(self.frame_2)
        self.dengji.setGeometry(QtCore.QRect(10, 60, 151, 16))
        self.dengji.setObjectName("dengji")
        self.cheliangshu = QtWidgets.QLabel(self.frame_2)
        self.cheliangshu.setGeometry(QtCore.QRect(10, 170, 141, 16))
        self.cheliangshu.setObjectName("cheliangshu")
        self.zichan = QtWidgets.QLabel(self.frame_2)
        self.zichan.setGeometry(QtCore.QRect(180, 10, 161, 16))
        self.zichan.setObjectName("zichan")
        self.progressBar = QtWidgets.QProgressBar(self.frame_2)
        self.progressBar.setGeometry(QtCore.QRect(10, 132, 131, 31))
        self.progressBar.setStyleSheet("*{border:1px solid rgb(0, 0, 0);background-color:rgb(207, 247, 255);}")
        self.progressBar.setProperty("value", 0)
        self.progressBar.setTextVisible(False)
        self.progressBar.setObjectName("progressBar")
        self.frame_3 = QtWidgets.QFrame(self.centralwidget)
        self.frame_3.setGeometry(QtCore.QRect(370, 70, 241, 241))
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_3.setLineWidth(3)
        self.frame_3.setObjectName("frame_3")
        self.park = QtWidgets.QPushButton(self.frame_3)
        self.park.setGeometry(QtCore.QRect(10, 10, 71, 51))
        self.park.setObjectName("park")
        self.frame_4 = QtWidgets.QFrame(self.centralwidget)
        self.frame_4.setGeometry(QtCore.QRect(0, 330, 611, 211))
        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_4.setLineWidth(2)
        self.frame_4.setObjectName("frame_4")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(-10, 50, 621, 20))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "QQ抢车位—BUG反馈1328649047"))
        self.login.setText(_translate("MainWindow", "登录"))
        self.bag.setText(_translate("MainWindow", "背包"))
        self.shop.setText(_translate("MainWindow", "商店"))
        self.all_car.setText(_translate("MainWindow", "车库"))
        self.set.setText(_translate("MainWindow", "设置"))
        self.nicheng.setText(_translate("MainWindow", "昵称:"))
        self.jingyan.setText(_translate("MainWindow", "经验:"))
        self.dengji.setText(_translate("MainWindow", "等级:"))
        self.cheliangshu.setText(_translate("MainWindow", "车辆数:"))
        self.zichan.setText(_translate("MainWindow", "资产:"))
        self.park.setText(_translate("MainWindow", "一键停车"))
# if __name__ == '__main__':
#     app = QtWidgets.QApplication(sys.argv)
#     MainWindow = QtWidgets.QMainWindow()
#     ui = Ui_MainWindow()
#
#     ui.setupUi(MainWindow)
#     MainWindow.show()
#     sys.exit(app.exec_())

界面配置和功能模块

import sys,requests,random,time
import qqqiangchewei
from PyQt5 import QtCore, QtWidgets
from threading import Thread
from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEngineProfile

class Main_app(QtWidgets.QMainWindow,qqqiangchewei.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.log('软件开始运行———请先登录')
        self.web = MyWebEngineView()  # 创建浏览器组件对象
        self.web.setFixedSize(300, 300)  # 设置大小
        self.web.setWindowTitle('请登录')
        QtWidgets.QVBoxLayout(self).addWidget(self.web)  # 再放浏览器

    def bangding(self):
        self.login.clicked.connect(self.show_web)
        self.park.clicked.connect(self.P_pack)

	#打开登录界面
    def show_web(self):
        self.web.close()
        self.web.load(QtCore.QUrl(
            "https://xui.ptlogin2.qq.com/cgi-bin/xlogin?&appid=549000912&s_url=http%3A%2F%2Fgameapp.qq.com%2F347"))  # 打开网页
        # self.setWindowModality(Qt.ApplicationModal)
        if 'ts' not in self.web.cookies.keys():
            self.web.show()
        else:
            a = QtWidgets.QMessageBox.question(self, "", "你已登录是否需要退出登录",
                                                             QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                                             QtWidgets.QMessageBox.No)
            if a == QtWidgets.QMessageBox.Yes:
                self.web = MyWebEngineView()
                self.web.setFixedSize(300, 300)
                self.login.setText('登录')
                del globals()['main_cookies'] #清除全局变量


    def P_pack(self):
        if 'tx_openid' in self.web.cookies.keys():
            self.P=parking()
            t = Thread(target=self.P.park)
            t.setDaemon(True)
            t.start()
        else:
            QtWidgets.QMessageBox.question(self,'','登录')

    def log(self,msg):
        self.shuchu.moveCursor(self.shuchu.textCursor().Start)
        self.shuchu.insertPlainText(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' '+ msg+'\n')


class MyWebEngineView(QWebEngineView):
    def __init__(self, *args, **kwargs):
        super(MyWebEngineView, self).__init__(*args, **kwargs)
        # 绑定cookie被添加的信号槽
        QWebEngineProfile.defaultProfile().cookieStore().cookieAdded.connect(self.onCookieAdd)
        self.cookies = {}  # 存放cookie字典
        self.login_state=False

    def onCookieAdd(self, cookie):  # 处理cookie添加的事件
            name = cookie.name().data().decode('utf-8')  # 先获取cookie的名字,再把编码处理一下
            value = cookie.value().data().decode('utf-8')  # 先获取cookie值,再把编码处理一下
            self.cookies[name] = value  # 将cookie保存到零时字典里
            if 'ts' in self.cookies.keys () and not self.login_state:
                APP.login.setText('已登录')
                self.login_state=True
                global main_cookies
                main_cookies = self.cookies
                self.close()
                APP.log('你已成功登录')


#登录抢车位类
class parking(object):
    def __init__(self):
        self.headers={
            'User-Agent':  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36' ,
            'Cookie' :	'rk_uid='+main_cookies.get('rk_uid')+';tx_openid='+main_cookies.get('tx_openid')+';tx_pfkey='+main_cookies.get('tx_pfkey')+ ';ts='+main_cookies.get('ts')+ ';rkauth_token='+main_cookies.get('rkauth_token')+ ';tx_openkey='+main_cookies.get('tx_openkey')
                }
        self.url_api = 'http://app347.qzone.qzoneapp.com/api/?client_token=' + main_cookies.get('ts')

    # 循环随机停车
    def park(self):
        # 获取好友

        friends = requests.get(url=self.url_api + '&method=friend.show',headers=self.headers).json()['data']['friend'].keys()

        id = 1
        while id <= 10:
            f = random.choice(list(friends))
            place = random.randint(2, 4)
            msg = requests.get(url=self.url_api + '&place=' + str(place) + '&method=park.placing&uid=' + f + '&garage_id=' + str(id),headers=self.headers).json()
            print(msg)
            if 'mc' in msg.keys():
                if msg['mc'] == 0:  # 如果已经停好则跳过
                    APP.log('car' + str(id) + '停车成功')
                    id += 1
                elif msg['mc'] == 2003:
                    APP.log('car' + str(id) + '停车未满15分钟')
                    id += 1
                elif msg['mc']==1038:
                    APP.log('操作频繁,停止')
                    break


# 活动   类
class parking_acticity(object):
    def __init__(self, parking):
        self.act_url = parking.url_api + '&method=activity.run&'

    # 爱心活动
    def aixin(self):
        # 点亮爱心
        for i in range(1, 4):
            requests.get(url=self.act_url + 'act_name=badge&act_method=req&index=' + str(i),headers=parking.headers)
        # 领取爱心
        requests.get(url=self.act_url + 'act_name=badge&act_method=req_awd',headers=parking.headers)
        # 送爱心
        pass

    # 寻宝活动
    def xunbao(self):
        requests.get(url=self.act_url + 'act_name=treasure_hunt&act_method=lottery',headers=parking.headers)



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    APP = Main_app()
    APP.bangding()
    APP.show()
    sys.exit(app.exec_())

截图

在这里插入图片描述

在这里插入图片描述
登录完成后会自动获取cookies 并且关闭登录窗口

在这里插入图片描述
点击停车后会向对应网址发送get请求,实现自动停车

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值