Python 运行bot时如何解冻Gui?

Python 运行bot时如何解冻Gui?,python,selenium,pyqt5,Python,Selenium,Pyqt5,我的代码很少有大问题。目前我正在构建一个带有接口的Whatsapp机器人。现在,当我开始运行机器人时,我根本无法阻止它。我在谷歌上搜索了很多,知道我需要一个线程,但我尝试的都是错误的。请帮我做这个!!所有被屏蔽的内容都可以忽略,只是试图解决这个问题的一些失败。 代码如下: from selenium.webdriver.common.keys import Keys from selenium import webdriver from selenium.webdriver.support.ui

我的代码很少有大问题。目前我正在构建一个带有接口的Whatsapp机器人。现在,当我开始运行机器人时,我根本无法阻止它。我在谷歌上搜索了很多,知道我需要一个线程,但我尝试的都是错误的。请帮我做这个!!所有被屏蔽的内容都可以忽略,只是试图解决这个问题的一些失败。 代码如下:

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtGui
import sys, threading, time

class interface(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initMe()


    def initMe(self):
        self.boldFont = QtGui.QFont()
        self.boldFont.setBold(True)
        self.setGeometry(1200, 250, 600, 500)
        self.title = self.setWindowTitle("Whatsapp Bot interface")
        self.Layout_components()
        self.labels()
        self.input()
        self.button()
        self.setFont(QFont("Arial", 15))
        self.setWindowIcon(QIcon("Bot.png"))

        self.show()


    def Layout_components(self):
        self.exit_ = QAction(QIcon("Bot.png"), "Exit", self)
        self.stop_ = QAction(QIcon("Bot.png"), "Stop", self)
        self.start_ = QAction(QIcon("Bot.png"), "Start", self)
        self.exit_.triggered.connect(self.exit)
        self.stop_.triggered.connect(self.stop)
        self.start_.triggered.connect(self.start)

        menubar = self.menuBar()
        file = menubar.addMenu("Bot")
        file.addAction(self.exit_)
        file.addAction(self.stop_)
        file.addAction(self.start_)

    def labels(self):

        labelp1 = QLabel("picture", self)
        labelp1.setPixmap(QPixmap("Bot.png"))
        labelp1.setGeometry(340, 100, 210, 180)

        labelp2 = QLabel("picture1", self)
        labelp2.setPixmap(QPixmap("whatsapp_symbol.png"))
        labelp2.setScaledContents(True)
        labelp2.resize(80, 80)
        labelp2.setGeometry(50, 400, 80, 80)

        label1 = QLabel("description", self)
        label1.setGeometry(50, 40, 500, 50)
        label1.setText("Welcome to my Whatsappbot. Are you ready to fuck other people with endless spam up. Have fun!!!")
        label1.setFont(QFont("Arial", 14))
        label1.setStyleSheet("border : 2px solid black;")
        label1.setWordWrap(True)

        label2 = QLabel("adress", self)
        label2.setGeometry(50, 100, 150, 50)
        label2.setText("adressed to: ")

        label2 = QLabel("message", self)
        label2.setGeometry(50, 300, 150, 50)
        label2.setText("message: ")

        label2 = QLabel("amount", self)
        label2.setGeometry(50, 200, 200, 50)
        label2.setText("amount of messages: ")

        self.label_input = QLabel("counter", self)
        self.label_input.setGeometry(170, 260, 80, 20)
        self.label_input.setFont(QFont("Arial", 15))
        self.label_input.setAlignment(Qt.AlignCenter)
        self.label_input.setStyleSheet("border:2px solid black")


    def input(self):
        self.input_adressed = QLineEdit(self)
        self.input_adressed.setGeometry(50, 150, 150, 30)
        self.input_adressed.textChanged.connect(self.clicked_adressed)

        self.input_message = QLineEdit(self)
        self.input_message.setGeometry(50, 350, 150, 30)
        self.input_message.textChanged.connect(self.clicked_message)

        self.input_amount = QSlider(self)
        self.input_amount.setGeometry(50, 240, 100, 70)
        self.input_amount.setMaximum(1000)
        self.input_amount.valueChanged.connect(self.clicked_amount)

    def button(self):

        self.but_stop = QPushButton("Stop", self)
        self.but_stop.setGeometry(340, 360, 210, 50)
        self.but_stop.setFont(self.boldFont)
        self.but_stop.clicked.connect(self.stop)

        self.but_start = QPushButton("Start", self)
        self.but_start.setGeometry(340, 300, 210, 50)
        self.but_start.setFont(self.boldFont)
        self.but_start.clicked.connect(self.start)

        self.but_exit = QPushButton("Exit", self)
        self.but_exit.setGeometry(340, 420, 210, 50)
        self.but_exit.setFont(self.boldFont)
        self.but_exit.clicked.connect(self.exit)

    def clicked_amount(self):

        self.amount = self.input_amount.value()
        if self.amount >= 0:
            self.label_input.setText(f"{self.amount}")

        return self.amount

    def clicked_adressed(self):

        #print(self.input_adressed.text())
        return self.input_adressed.text()

    def clicked_message(self):

        return self.input_message.text()

    def stop(self):
        print("programm stopps ...")


    def exit(self):
        #print("programm exits ...")
        app.exit()
        sys.exit()

    def start(self):
        pop_up = QMessageBox(self)
        pop_up.setWindowTitle("Start Bot")
        pop_up.setText("Do you really wanna start the spam ?!")
        pop_up.setIcon(QMessageBox.Question)
        pop_up.setStandardButtons(QMessageBox.Cancel | QMessageBox.No | QMessageBox.Yes)
        pop_up.setDefaultButton(QMessageBox.Yes)
        x = pop_up.exec_()

        if x == QMessageBox.Yes:
            print("programm starts ...")
            #self.worker_start()
            self.main()

    # def worker_start(self):
    #         self.worker = WorkerThread()
    #         self.worker.start()
    #         self.worker.finished.connect(self.worker_finished)
    #         self.worker.update_progress.connect(self.update_progress)
    #
    # def worker_finished(self):
    #     QMessageBox.information(self, "Done", "Worker thread complete")


    def main(self):

        message = self.clicked_message()
        addressed = self.clicked_adressed()
        profile_path = "user-data-dir=/home/daniel/.config/google-chrome/storing"

        options = webdriver.ChromeOptions()
        options.add_argument(profile_path)
        browser = webdriver.Chrome(executable_path="./chromedriver", options=options)
        browser.get("https://web.whatsapp.com")

        time.sleep(4)
        search = WebDriverWait(browser, 500).until(expected_conditions.presence_of_element_located(
            (By.CSS_SELECTOR, "#side > div.SgIJV > div > label > div > div._2_1wd.copyable-text.selectable-text")))
        search.send_keys(addressed)
        time.sleep(1)
        search.send_keys(Keys.ENTER)
        send = WebDriverWait(browser, 500).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,"#main > footer > div.vR1LG._3wXwX.copyable-area > div._2A8P4._2A1WX > div > div._2_1wd.copyable-text.selectable-text")))

        for i in range(self.clicked_amount()):
            send.send_keys(message)
            send.send_keys(Keys.ENTER)

# class WorkerThread(QThread, interface):
#     update_progress = pyqtSignal(int)
#     def run(self):
#         for x in range(100):
#             print(x)
#             time.sleep(2)
#             self.update_progress.emit(x)

            # self.setEnabled(True)
            # message = self.clicked_message()
            # addressed = self.clicked_adressed()
            # profile_path = "user-data-dir=/home/daniel/.config/google-chrome/storing"
            #
            # options = webdriver.ChromeOptions()
            # options.add_argument(profile_path)
            # browser = webdriver.Chrome(executable_path="./chromedriver", options=options)
            # browser.get("https://web.whatsapp.com")
            #
            # time.sleep(4)
            # search = WebDriverWait(browser, 500).until(expected_conditions.presence_of_element_located(
            #     (By.CSS_SELECTOR, "#side > div.SgIJV > div > label > div > div._2_1wd.copyable-text.selectable-text")))
            # search.send_keys(addressed)
            # time.sleep(1)
            # search.send_keys(Keys.ENTER)
            # send = WebDriverWait(browser, 500).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,
            #                                                                                           "#main > footer > div.vR1LG._3wXwX.copyable-area > div._2A8P4._2A1WX > div > div._2_1wd.copyable-text.selectable-text")))
            #
            # for i in range(self.clicked_amount()):
            #     send.send_keys(message)
            #     send.send_keys(Keys.ENTER)


app = QApplication(sys.argv)
x = interface()
sys.exit(app.exec_())

本例中的逻辑是从GUI获取信息(金额、地址和消息),并在另一个线程中执行耗时的函数,将信息传递给它

从functools导入缓存的\u属性
导入系统
导入线程
导入时间
从selenium.webdriver.common.keys导入密钥
从selenium导入webdriver
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support导入预期的\u条件
从selenium.webdriver.common.by导入
从PyQt5.QtWidgets导入*
从PyQt5.QtGui导入*
从PyQt5.QtCore导入*
班主任:
def启动(自身、金额、地址、消息):
穿线,穿线(
目标=自我执行,
args=(
数量
地址:,
消息
),
daemon=True,
).start()
def_执行(自身、金额、地址、消息):
profile_path=“user data dir=/home/daniel/.config/google chrome/storing”
options=webdriver.ChromeOptions()
选项。添加参数(配置文件路径)
浏览器=webdriver.Chrome(可执行文件路径=“./chromedriver”,选项=选项)
browser.get(“https://web.whatsapp.com")
时间。睡眠(4)
搜索=WebDriverWait(浏览器,500)。直到(
预期的\u条件。存在\u元素\u(
(
By.CSS_选择器,
“#side>div.SgIJV>div>label>div>div.#u 2#u 1wd.可复制文本.可选择文本”,
)
)
)
搜索。发送密钥(地址)
时间。睡眠(1)
搜索。发送密钥(密钥。输入)
send=WebDriverWait(浏览器,500)。直到(
预期的\u条件。存在\u元素\u(
(
By.CSS_选择器,
“#main>footer>div.vR1LG.3wXwX.copyable-area>div.2A8P4.2A1WX>div>div.2_1wd.可复制文本.可选文本”,
)
)
)
对于范围内的i(金额):
发送。发送密钥(消息)
发送。发送\u键(键。输入)
类接口(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.initMe()
def initMe(self):
self.boldFont=QFont()
self.boldFont.setBold(真)
自身设置几何体(1200250600500)
self.title=self.setWindowTitle(“Whatsapp机器人接口”)
self.Layout_组件()
self.labels()
self.input()
self.button()
self.setFont(QFont(“Arial”,15))
self.setWindowIcon(QIcon(“Bot.png”))
self.show()
def布局_部件(自身):
self.exit uqaction(QIcon(“Bot.png”),“exit”,self)
self.stop uqaction(QIcon(“Bot.png”),“stop”,self)
self.start QAction(QIcon(“Bot.png”),“start”,self)
self.exit\uu.triggered.connect(self.exit)
自停止触发连接(自停止)
self.start\u.triggered.connect(self.start)
menubar=self.menubar()
file=menubar.addMenu(“Bot”)
file.addAction(self.exit)
file.addAction(self.stop)
file.addAction(self.start)
def标签(自):
labelp1=QLabel(“图片”,自我)
labelp1.setPixmap(QPixmap(“Bot.png”))
labelp1.集合几何(340100210180)
labelp2=QLabel(“picture1”,self)
labelp2.setPixmap(QPixmap(“whatsapp_symbol.png”))
labelp2.setScaledContents(真)
labelp2.调整大小(80,80)
labelp2.setGeometry(504008080)
label1=QLabel(“描述”,自我)
label1.集合几何(50、40、500、50)
label1.setText(
“欢迎来到我的Whatsappbot。你准备好用无休止的垃圾邮件来干掉其他人了吗?玩得开心!!!”
)
标签1.setFont(QFont(“Arial”,14))
标签1.setStyleSheet(“边框:2px纯黑;”)
标签1.setWordWrap(真)
label2=QLabel(“地址”,自我)
标签2.集合几何(50、100、150、50)
label2.setText(“收件人:”)
label2=QLabel(“消息”,self)
标签2.集合几何(5030015050)
label2.setText(“消息:”)
label2=QLabel(“金额”,自身)
label2.集合几何(5020020050)
label2.setText(“消息量:”)
self.label_input=QLabel(“计数器”,self)
self.label_input.setGeometry(170、260、80、20)
self.label_input.setFont(QFont(“Arial”,15))
self.label_input.setAlignment(Qt.AlignCenter)
self.label_input.setStyleSheet(“边框:2倍纯黑色”)
def输入(自):
self.input_address=QLineEdit(self)
自输入地址设置几何(50、150、150、30)
self.input_message=QLineEdit(self)
self.input_message.setGeometry(50、350、150、30)
self.input\u amount=QSlider(self)
自输入量设置几何(5024010070)
自我输入金额设置最大值(1000)
self.input\u amount.valueChanged.connect(self.label\u input.setNum)
def按钮(自身):
self.but_stop=QPushButton(“停止”,self)
自停设置几何(340、360、210、50)
self.but_stop.setFont(self.boldFont)
self.but\u stop.clicked.connect(self.stop)
self.but_start=QPushButton(“开始”,self)
self.but_start.setGeometry(34030021050)
self.but_start.setFont(self.boldFont)
self.but\u start.clicked.connect(self.start)
self.but_exit=QPushButton(“退出”,self)
self.but_exit.setGeometry(340、420、210、50)
self.but_exit.setFont(self.boldFont)