pyqt5+Selenium 用多线程的时候,send_keys()所有的动作会多次重复执行是怎么回事?

pyqt5+Selenium 用多线程的时候,send_keys()、click() 等所有的动作都会多次重复执行是怎么回事?

img

img

我这里创建了两个线程,它就重复输入了两次。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from selenium import webdriver
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QThread, pyqtSignal
from selenium.webdriver import ChromeOptions
from fake_useragent import UserAgent
import time
import requests
from zmq import proxy
from threading import Thread



#  加载UI文件
class Stats:
    

    def __init__(self):
        self.ui = uic.loadUi('Click_Ui.ui')
        # 自定义信号的处理函数
        # so.breakSignal.connect(self.printToGui)
        self.intUI()  # 控件默认参数
        self.But_c()  # 按钮事件

    # 控件默认参数
    def intUI(self):
        # self.ui.url_lineEdit.setPlaceholderText('请在这里输入58网址,例如:https://cd.58.com/')  # 默认提示
        self.ui.url_lineEdit.setText('https://cd.58.com/')  # 默认设置可以修改
        self.ui.reg_lineEdit.setText('武侯')
        self.ui.exc_comboBox.addItems(['好又快服务'])  # 添加商家
        self.ui.key_lineEdit.setText('管道疏通')  # 设置关键词
        # 进度条默认设置
        self.pv = 0
        self.ui.progressBar.setRange(0,100)
        self.ui.progressBar.setValue(self.pv)
        # 按钮默认设置
        self.ui.startButton.setText('开始')
        # 提示
        self.ui.spinBox_2.setValue(5)
        self.ui.spinBox.setValue(3)
      
    # 进度条
    def pgbar(self):
        if self.ui.startButton.text() == '开始':
            self.ui.progressBar.setValue(0)
            self.ui.startButton.setText('停止')
            # 启动脚本
            self.xc()

        else:
            self.ui.startButton.setText('开始')

    # 开始按钮连接
    def But_c(self):
        self.ui.startButton.clicked.connect(self.pgbar)  # 开始按钮连接进度条
        # self.ui.detButton.clicked.connect(self.Api_kd)  # 检测按钮

    # 接收控件参数
    def kj_cs(self):
        self.url = self.ui.url_lineEdit.text()  # 目标网址
        self.key = self.ui.key_lineEdit.text()  # 关键词
        self.reg = self.ui.reg_lineEdit.text()  # 服务区域
        self.exc = self.ui.exc_comboBox.currentText()  # 排除商家

    def Bro_s(self):
        self.kj_cs()
        options = ChromeOptions()
        options.add_argument('user-agent=%s' % UserAgent().random)
        self.driver = webdriver.Chrome(options=options)
        self.driver.get('http://httpbin.org/ip')
        
        time.sleep(2)
        self.driver.get(self.url)  # 传入目标网址
        time.sleep(3)
        self.driver.find_element_by_id('keyword').send_keys(self.key)

    # 创建线程
    def xc(self):
        try:
            for j in range(2):
                t = Thread(target=self.Bro_s)
                t.start()
        except:
            print('无法启动') 


# 开始程序
if __name__ == '__main__':
    App = QApplication(sys.argv)
    stats = Stats()
    stats.ui.show()
    sys.exit(App.exec_())


解决方法
可以尝试设置一个全局变量来解决这个问题
比如: 以输入点击为例

input_flag = True
click_flag = True

当你输入或者点击之前加个判断:

if input_flag:
    # 进行输入事件输入
   input_flag = False
if click_flag:
    # 进行点击事件输入
   click_flag = False

这样应该可以避免这个问题


如有问题及时沟通

不要用多线程,循环即可,