测试积点老人 发表于 2022-5-23 10:58:36

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




我这里创建了两个线程,它就重复输入了两次。
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_())



郭小贱 发表于 2022-5-24 09:49:44

这个不清楚了...学习下。

bellas 发表于 2022-5-24 10:20:34

有三个窗口都用到了,那应该是调用三次呀

qqq911 发表于 2022-5-24 10:21:23

线程要接管不同的浏览器才行

jingzizx 发表于 2022-5-24 16:38:37

看线程运行情况
页: [1]
查看完整版本: pyqt5+Selenium 用多线程的时候,send_keys()所有的动作会多次重复执行是怎么回事?