久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

<i id='vRZwe'><tr id='vRZwe'><dt id='vRZwe'><q id='vRZwe'><span id='vRZwe'><b id='vRZwe'><form id='vRZwe'><ins id='vRZwe'></ins><ul id='vRZwe'></ul><sub id='vRZwe'></sub></form><legend id='vRZwe'></legend><bdo id='vRZwe'><pre id='vRZwe'><center id='vRZwe'></center></pre></bdo></b><th id='vRZwe'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='vRZwe'><tfoot id='vRZwe'></tfoot><dl id='vRZwe'><fieldset id='vRZwe'></fieldset></dl></div>

    <small id='vRZwe'></small><noframes id='vRZwe'>

    <legend id='vRZwe'><style id='vRZwe'><dir id='vRZwe'><q id='vRZwe'></q></dir></style></legend>

    • <bdo id='vRZwe'></bdo><ul id='vRZwe'></ul>
    1. <tfoot id='vRZwe'></tfoot>

      1. 帶有 Selenium 的應(yīng)用程序不響應(yīng) - 不顯示進度條,

        App with Selenium Not Responding - Not showing the progress bar and Not Emitting the text in Console until the task is completed(帶有 Selenium 的應(yīng)用程序不響應(yīng) - 不顯示進度條,也不在控制臺中發(fā)出文本,直到任務(wù)完
          <tbody id='YPLDD'></tbody>
      2. <i id='YPLDD'><tr id='YPLDD'><dt id='YPLDD'><q id='YPLDD'><span id='YPLDD'><b id='YPLDD'><form id='YPLDD'><ins id='YPLDD'></ins><ul id='YPLDD'></ul><sub id='YPLDD'></sub></form><legend id='YPLDD'></legend><bdo id='YPLDD'><pre id='YPLDD'><center id='YPLDD'></center></pre></bdo></b><th id='YPLDD'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='YPLDD'><tfoot id='YPLDD'></tfoot><dl id='YPLDD'><fieldset id='YPLDD'></fieldset></dl></div>

          1. <legend id='YPLDD'><style id='YPLDD'><dir id='YPLDD'><q id='YPLDD'></q></dir></style></legend><tfoot id='YPLDD'></tfoot>

                <bdo id='YPLDD'></bdo><ul id='YPLDD'></ul>

              • <small id='YPLDD'></small><noframes id='YPLDD'>

                  本文介紹了帶有 Selenium 的應(yīng)用程序不響應(yīng) - 不顯示進度條,也不在控制臺中發(fā)出文本,直到任務(wù)完成的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

                  問題描述

                  使用 PyQt5 和 selenium 時,窗口標題顯示為 Not Responding.腳本執(zhí)行完成后會顯示進度條和控制臺發(fā)射流.需要幫助來解決這個問題.

                  Window title is showing as Not Responding when using PyQt5 and selenium. The progress bar and the console emit stream displays after the completion of execution of script. Need help in getting this fixed.

                   from selenium import webdriver
                   from selenium.common.exceptions import 
                    TimeoutException,NoSuchElementException,ElementClickInterceptedException
                   from selenium.webdriver.support.ui import WebDriverWait,Select
                   from selenium.webdriver.support import expected_conditions as EC
                   from selenium.webdriver.common.by import By
                   from selenium.webdriver.firefox.options import Options
                   from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
                   from selenium.webdriver.common.action_chains import ActionChains
                   import time
                   import os.path
                   import pandas as pd
                   import csv
                   import threading
                   from PyQt5 import QtCore, QtGui, QtWidgets
                  
                   class EmittingStream(QtCore.QObject):
                  
                  textWritten = QtCore.pyqtSignal(str)
                  def write(self, text):
                      self.textWritten.emit(str(text))
                  
                   class Ui_Fuse(object):
                  
                  def launch_Selenium_Thread(self):
                      _translate = QtCore.QCoreApplication.translate
                      self.pushButton.setEnabled(False)
                      self.progressBar.setValue(0)
                      self.textEdit.clear()
                      t = threading.Thread(target=self.generate())
                      t.start()
                  
                  def loaddata(self):
                      self.completed = 0
                      while self.completed < 100:
                          self.completed += 0.0001
                          self.progressBar.setValue(self.completed)
                  
                  def setupUi(self, Fuse):
                      Fuse.setObjectName("Fuse")
                      Fuse.resize(513, 284)
                      font = QtGui.QFont()
                      font.setPointSize(10)
                      font.setBold(True)
                      font.setWeight(75)
                      Fuse.setFont(font)
                      self.label = QtWidgets.QLabel(Fuse)
                      self.label.setGeometry(QtCore.QRect(90, 67, 71, 20))
                      self.label.setObjectName("label")
                      self.LineEdit = QtWidgets.QLineEdit(Fuse)
                      self.LineEdit.setGeometry(QtCore.QRect(170, 60, 181, 31))
                      self.LineEdit.setObjectName("textEdit")
                      self.LineEdit_2 = QtWidgets.QLineEdit(Fuse)
                      self.LineEdit_2.setGeometry(QtCore.QRect(170, 100, 181, 31))
                      self.LineEdit_2.setObjectName("textEdit_2")
                      self.LineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
                      self.pushButton = QtWidgets.QPushButton(Fuse)
                      self.pushButton.setGeometry(QtCore.QRect(169, 150, 90, 31))
                      self.pushButton.setObjectName("pushButton")
                      self.pushButton.clicked.connect(self.launch_Selenium_Thread)
                      self.pushButton.clicked.connect(self.loaddata)
                      self.pushButton_2 = QtWidgets.QPushButton(Fuse)
                      self.pushButton_2.setGeometry(QtCore.QRect(262, 150, 90, 31))
                      self.pushButton_2.setObjectName("pushButton_3")
                      self.pushButton_2.clicked.connect(self.clearall)
                      self.label_2 = QtWidgets.QLabel(Fuse)
                      self.label_2.setGeometry(QtCore.QRect(89, 107, 71, 20))
                      self.label_2.setObjectName("label_2")
                      self.label_3 = QtWidgets.QLabel(Fuse)
                      self.label_3.setGeometry(QtCore.QRect(180, 127, 181, 30))
                      self.label_3.setObjectName("label_3")
                      self.progressBar = QtWidgets.QProgressBar(Fuse)
                      self.progressBar.setEnabled(True)
                      self.progressBar.setGeometry(QtCore.QRect(8, 270, 506, 10))
                      self.progressBar.setLayoutDirection(QtCore.Qt.LeftToRight)
                      self.progressBar.setAutoFillBackground(False)
                      self.progressBar.setProperty("value", 24)
                      self.progressBar.setAlignment(QtCore.Qt.AlignJustify)
                      self.progressBar.setInvertedAppearance(False)
                      self.progressBar.setObjectName("progressBar")
                      self.textEdit = QtWidgets.QTextEdit(Fuse)
                      self.textEdit.setGeometry(QtCore.QRect(8, 200, 497, 60))
                      self.textEdit.setObjectName("textEdit")
                      self.textEdit.setFont(font)
                      self.textEdit.setReadOnly(True)
                  
                      self.retranslateUi(Fuse)
                      QtCore.QMetaObject.connectSlotsByName(Fuse)
                  
                  def retranslateUi(self, Fuse):
                      _translate = QtCore.QCoreApplication.translate
                      Fuse.setWindowTitle(_translate("Fuse", "Fuse | Invoice Generation"))
                      self.label.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-size:10pt; font-weight:600;">User Name</span></p></body></html>"))
                      self.pushButton.setText(_translate("Fuse", "Submit"))
                      self.pushButton_2.setText(_translate("Fuse", "Reset"))
                      self.label_2.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-size:10pt; font-weight:600;">Password</span></p></body></html>"))
                      self.label_3.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-size:7pt; color:red; font-weight:600;">Invalid User Name or Password</span></p></body></html>"))
                      self.label_3.hide()
                      Fuse.setWindowFlags( QtCore.Qt.CustomizeWindowHint | QtCore.Qt.MSWindowsFixedSizeDialogHint |QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint )
                  
                  def clearall(self):
                      self.LineEdit.clear()
                      self.LineEdit_2.clear()
                      self.label_3.clear()
                      self.textEdit.clear()
                      self.LineEdit.setEnabled(True)
                      self.LineEdit_2.setEnabled(True)
                      self.pushButton.setEnabled(True)
                  
                  def __init__(self, parent=None, **kwargs):
                      sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
                      sys.stderr = EmittingStream(textWritten=self.normalOutputWritten)
                  
                  def __del__(self):
                      sys.stdout = sys.__stdout__
                      sys.stderr = sys.__stderr__
                  
                  def normalOutputWritten(self, text):
                      cursor = self.textEdit.textCursor()
                      cursor.movePosition(QtGui.QTextCursor.End)
                      cursor.insertText(text)
                      self.textEdit.setTextCursor(cursor)
                      self.textEdit.ensureCursorVisible()
                  
                  def generate(self):
                      self.LineEdit.setEnabled(False)
                      self.LineEdit_2.setEnabled(False)
                      self.pushButton.setEnabled(False)
                      self.textEdit.clear()
                      options = Options()
                      options.add_argument("--headless")
                      profile = FirefoxProfile()
                      driver = webdriver.Firefox(firefox_profile=profile,firefox_options=options,executable_path= os.path.expandvars('%userprofile%\Desktop\RPA\Tools\geckodriver.exe'))
                      driver.get("https://example.com/Login.aspx")
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.ID, "loginBtnn")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')
                      search_field = driver.find_element_by_id("txtUserName")
                      search_field.clear()
                      username = self.LineEdit.text()
                      search_field.send_keys(username)
                      search_field = driver.find_element_by_id("txtPassword")
                      search_field.clear()
                      password = self.LineEdit_2.text()
                      search_field.send_keys(password)
                      time.sleep(5)
                      driver.find_element_by_id("BtnLogin").click()
                      self.textEdit.insertPlainText('Clicked on Login')
                      time.sleep(5)
                      try:
                          element = driver.find_element_by_xpath("http://span[contains(@id,'lblFailure')]")
                          if element.text == "Invalid User Name or Password":
                              self.textEdit.insertPlainText("Invalid User Name or Password")
                              self.label_3.show()
                              self.LineEdit.setEnabled(True)
                              self.LineEdit_2.setEnabled(True)
                              self.pushButton.setEnabled(True)
                              driver.quit()
                              driver.close()
                      except NoSuchElementException:
                          self.textEdit.insertPlainText("Correct User Name or Password")
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.XPATH, "/html/body/form/div[4]/a/img")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')    
                      driver.find_element_by_xpath("/html/body/form/div[4]/a/img").click()
                      self.textEdit.insertPlainText('Clicked Product Links')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.ID, "lnkFuse")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')   
                      driver.find_element_by_id("lnkFuse").click()
                      self.textEdit.insertPlainText('Clicked on Fuse Link')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.XPATH, "http://span[@class='Invoice Processing'][contains(.,'Invoice Processing')]")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')
                      element_to_hover_over = driver.find_element_by_xpath("http://span[@class='Invoice Processing'][contains(.,'Invoice Processing')]")
                      hover = ActionChains(driver).move_to_element(element_to_hover_over)
                      hover.perform()
                      self.textEdit.insertPlainText('Clicked on Invoice Processing')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.XPATH, "http://a[@href='../../RS/Batch/AuditInvoice.aspx']")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')
                      driver.find_element_by_xpath("http://a[@href='../../RS/Batch/AuditInvoice.aspx']").click()
                      self.textEdit.insertPlainText('Clicked on Audit Invoices')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.ID, "MainContent_ddlSearchInvoiceStatus")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')
                      invoice_audit = 'Audited' 
                      InvoiceStatus = Select(driver.find_element_by_id("MainContent_ddlSearchInvoiceStatus"))
                      for option in InvoiceStatus.options:
                          option_text = option.text
                          if invoice_audit in option_text:
                              option.click()
                              break
                      self.textEdit.insertPlainText('Selected Audited from Dropdown')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.ID, "MainContent_btnSearch")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')
                      driver.find_element_by_id('MainContent_btnSearch').click() 
                      self.textEdit.insertPlainText('Clicked on Search Button')
                      try:
                          WebDriverWait(driver, 60000).until(
                          EC.element_to_be_clickable((By.ID, "MainContent_ddlItemsPerPage")));
                      except TimeoutException:
                          self.textEdit.insertPlainText('Timed out waiting for page to load')    
                      element = driver.find_element_by_id('MainContent_ddlItemsPerPage')
                      element.location_once_scrolled_into_view
                      driver.find_element_by_id('MainContent_ddlItemsPerPage').click() 
                      items_perpage = '500' 
                      records_list = Select(driver.find_element_by_id("MainContent_ddlItemsPerPage"))
                      for option in records_list.options:
                          option_text = option.text
                          if items_perpage in option_text:
                              option.click()
                              break
                      time.sleep(5)
                      self.textEdit.insertPlainText('Selected Max items per page')
                  
                      list_links = driver.find_elements_by_partial_link_text('Generate')
                      time.sleep(5)
                      id_list = []
                      for i in list_links:
                          data = i.get_attribute('id')
                          self.textEdit.insertPlainText(data)
                          id_list.append(data)
                          id_df = pd.DataFrame(id_list)
                          self.textEdit.insertPlainText(id_df)
                      for row in id_df.values:
                          row_val = str(row)[2:-2]
                          try:
                              WebDriverWait(driver, 60000).until(
                              EC.element_to_be_clickable((By.ID, "MainContent_gvAuditInvoice")));
                              self.textEdit.insertPlainText('Element Found')               
                              element = driver.find_element_by_id(row_val)
                              element.location_once_scrolled_into_view
                              WebDriverWait(driver, 60000).until(
                              EC.element_to_be_clickable((By.ID, row_val)));
                              driver.find_element_by_id(row_val).click()
                              localtime = time.strftime("%m-%d-%Y  %I:%M:%S")
                              self.textEdit.insertPlainText(row_val + "|" + 'Clicked' + '|' + localtime)
                              time.sleep(5)
                          except ElementClickInterceptedException:
                              continue
                              self.textEdit.insertPlainText('Timed out waiting for page to load')
                          time.sleep(5)
                      self.textEdit.insertPlainText('Completed')
                      self.LineEdit.clear()
                      self.LineEdit_2.clear()
                      self.label_3.clear()
                      self.LineEdit.setEnabled(True)
                      self.LineEdit_2.setEnabled(True)
                      self.pushButton.setEnabled(True)
                      self.stop_Selenium_Thread()
                  
                  def stop_Selenium_Thread(self):
                      _translate = QtCore.QCoreApplication.translate
                      self.pushButton.setEnabled(True)
                      t = threading.Thread(target=self.stop_Selenium_Thread)
                      for i, t in enumerate(self.generate()):
                          t.join()
                          print('Thread {} Stopped'.format(i))
                  
                  
                  if __name__ == "__main__":
                     import sys
                     app = QtWidgets.QApplication(sys.argv)
                     Fuse = QtWidgets.QDialog()
                     ui = Ui_Fuse()
                     ui.setupUi(Fuse)
                     Fuse.show()
                     sys.exit(app.exec_())
                  

                  我的實際結(jié)果應(yīng)該是當(dāng)我點擊應(yīng)用程序上的提交按鈕時,程序應(yīng)該開始執(zhí)行腳本,并且代碼中給出的 self.textEdit.insertPlainText 應(yīng)該隨著進度條的移動在文本編輯中流式傳輸.

                  My actual result should be when i hit the submit button on the app, the program should start executing the script and the self.textEdit.insertPlainText given in the code should stream in the text edit with progress bar moving.

                  推薦答案

                  首先你有以下不良編程習(xí)慣:

                  Before all you have the following bad programming practices:

                  • 您正在用 GUI 搞亂業(yè)務(wù)邏輯.
                  • 變量名稱并未描述變量的用途.
                  • 一個文件中有很多代碼.

                  另一方面,轉(zhuǎn)到 Qt 你有以下錯誤:

                  On the other hand going to Qt you have the following errors:

                  • 您不應(yīng)從另一個線程修改 GUI,因為 GUI 不是安全的,您必須使用信號、事件等.
                  • 當(dāng)您更改大小時,您必須使用 GUI 布局來適應(yīng).

                  另一方面,我沒有測試你的代碼,但我發(fā)現(xiàn)你的一個錯誤是

                  On the other hand I have not tested your code but I see that one of your errors is

                  t = threading.Thread(target=self.generate())
                  

                  因為你是在調(diào)用函數(shù)而不是把它傳遞給函數(shù),所以它必須是

                  since you are invoking the function instead of passing it to the function, it must be

                  t = threading.Thread(target=self.generate)
                  

                  考慮到上述情況,我實現(xiàn)了以下內(nèi)容:

                  Considering the above, I have implemented the following:

                  fuse_ui.py

                  # -*- coding: utf-8 -*-
                  
                  # Form implementation generated from reading ui file 'fuse.ui'
                  #
                  # Created by: PyQt5 UI code generator 5.12.1
                  #
                  # WARNING! All changes made in this file will be lost!
                  
                  from PyQt5 import QtCore, QtGui, QtWidgets
                  
                  
                  class Ui_Fuse(object):
                      def setupUi(self, Fuse):
                          Fuse.setObjectName("Fuse")
                          Fuse.resize(556, 513)
                          sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
                          sizePolicy.setHorizontalStretch(0)
                          sizePolicy.setVerticalStretch(0)
                          sizePolicy.setHeightForWidth(Fuse.sizePolicy().hasHeightForWidth())
                          Fuse.setSizePolicy(sizePolicy)
                          self.verticalLayout = QtWidgets.QVBoxLayout(Fuse)
                          self.verticalLayout.setObjectName("verticalLayout")
                          spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
                          self.verticalLayout.addItem(spacerItem)
                          self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
                          self.horizontalLayout_2.setObjectName("horizontalLayout_2")
                          spacerItem1 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
                          self.horizontalLayout_2.addItem(spacerItem1)
                          self.gridLayout = QtWidgets.QGridLayout()
                          self.gridLayout.setObjectName("gridLayout")
                          self.userNameLabel = QtWidgets.QLabel(Fuse)
                          self.userNameLabel.setObjectName("userNameLabel")
                          self.gridLayout.addWidget(self.userNameLabel, 0, 0, 1, 1)
                          self.userNameLineEdit = QtWidgets.QLineEdit(Fuse)
                          self.userNameLineEdit.setObjectName("userNameLineEdit")
                          self.gridLayout.addWidget(self.userNameLineEdit, 0, 1, 1, 1)
                          self.passwordLabel = QtWidgets.QLabel(Fuse)
                          self.passwordLabel.setObjectName("passwordLabel")
                          self.gridLayout.addWidget(self.passwordLabel, 1, 0, 1, 1)
                          self.passwordLineEdit = QtWidgets.QLineEdit(Fuse)
                          self.passwordLineEdit.setObjectName("passwordLineEdit")
                          self.gridLayout.addWidget(self.passwordLineEdit, 1, 1, 1, 1)
                          self.invalidLabel = QtWidgets.QLabel(Fuse)
                          sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
                          sizePolicy.setHorizontalStretch(0)
                          sizePolicy.setVerticalStretch(0)
                          sizePolicy.setHeightForWidth(self.invalidLabel.sizePolicy().hasHeightForWidth())
                          self.invalidLabel.setSizePolicy(sizePolicy)
                          self.invalidLabel.setAlignment(QtCore.Qt.AlignCenter)
                          self.invalidLabel.setObjectName("invalidLabel")
                          self.gridLayout.addWidget(self.invalidLabel, 2, 1, 1, 1)
                          self.widget = QtWidgets.QWidget(Fuse)
                          sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
                          sizePolicy.setHorizontalStretch(0)
                          sizePolicy.setVerticalStretch(0)
                          sizePolicy.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth())
                          self.widget.setSizePolicy(sizePolicy)
                          self.widget.setObjectName("widget")
                          self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
                          self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
                          self.horizontalLayout.setObjectName("horizontalLayout")
                          self.submitButton = QtWidgets.QPushButton(self.widget)
                          sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
                          sizePolicy.setHorizontalStretch(0)
                          sizePolicy.setVerticalStretch(0)
                          sizePolicy.setHeightForWidth(self.submitButton.sizePolicy().hasHeightForWidth())
                          self.submitButton.setSizePolicy(sizePolicy)
                          self.submitButton.setObjectName("submitButton")
                          self.horizontalLayout.addWidget(self.submitButton)
                          self.resetButton = QtWidgets.QPushButton(self.widget)
                          sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
                          sizePolicy.setHorizontalStretch(0)
                          sizePolicy.setVerticalStretch(0)
                          sizePolicy.setHeightForWidth(self.resetButton.sizePolicy().hasHeightForWidth())
                          self.resetButton.setSizePolicy(sizePolicy)
                          self.resetButton.setObjectName("resetButton")
                          self.horizontalLayout.addWidget(self.resetButton)
                          self.gridLayout.addWidget(self.widget, 3, 1, 1, 1)
                          self.horizontalLayout_2.addLayout(self.gridLayout)
                          spacerItem2 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
                          self.horizontalLayout_2.addItem(spacerItem2)
                          self.verticalLayout.addLayout(self.horizontalLayout_2)
                          spacerItem3 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
                          self.verticalLayout.addItem(spacerItem3)
                          self.logTextEdit = QtWidgets.QTextEdit(Fuse)
                          self.logTextEdit.setObjectName("logTextEdit")
                          self.verticalLayout.addWidget(self.logTextEdit)
                          self.progressBar = QtWidgets.QProgressBar(Fuse)
                          self.progressBar.setProperty("value", 24)
                          self.progressBar.setObjectName("progressBar")
                          self.verticalLayout.addWidget(self.progressBar)
                  
                          self.retranslateUi(Fuse)
                          QtCore.QMetaObject.connectSlotsByName(Fuse)
                  
                      def retranslateUi(self, Fuse):
                          _translate = QtCore.QCoreApplication.translate
                          Fuse.setWindowTitle(_translate("Fuse", "Dialog"))
                          self.userNameLabel.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-weight:600;">User Name</span></p></body></html>"))
                          self.passwordLabel.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-weight:600;">Password</span></p></body></html>"))
                          self.invalidLabel.setText(_translate("Fuse", "<html><head/><body><p><span style=" font-size:7pt; color:red; font-weight:600;">Invalid User Name or Password</span></p></body></html>"))
                          self.submitButton.setText(_translate("Fuse", "Submit"))
                          self.resetButton.setText(_translate("Fuse", "Reset"))
                  
                  
                  
                  
                  if __name__ == "__main__":
                      import sys
                      app = QtWidgets.QApplication(sys.argv)
                      Fuse = QtWidgets.QDialog()
                      ui = Ui_Fuse()
                      ui.setupUi(Fuse)
                      Fuse.show()
                      sys.exit(app.exec_())
                  

                  fusi_worker.py

                  import os
                  import time
                  
                  from selenium import webdriver
                  from selenium.common.exceptions import TimeoutException,NoSuchElementException,ElementClickInterceptedException
                  from selenium.webdriver.support.ui import WebDriverWait,Select
                  from selenium.webdriver.support import expected_conditions as EC
                  from selenium.webdriver.common.by import By
                  from selenium.webdriver.firefox.options import Options
                  from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
                  from selenium.webdriver.common.action_chains import ActionChains
                  
                  from PyQt5 import QtCore
                  
                  import pandas as pd
                  
                  class FusiWorker(QtCore.QObject):
                      progressChanged = QtCore.pyqtSignal(int)
                      logSignal = QtCore.pyqtSignal(str)
                      invalidSignal = QtCore.pyqtSignal()
                      finished = QtCore.pyqtSignal()
                  
                      @QtCore.pyqtSlot(str, str)
                      def start(self, username, password):
                  
                          options = Options()
                          options.add_argument("--headless")
                          profile = FirefoxProfile()
                          driver_path = os.path.expandvars('%userprofile%\Desktop\RPA\Tools\geckodriver.exe')
                          driver = webdriver.Firefox(firefox_profile=profile, options=options, executable_path=driver_path)
                          driver.get("https://example.com/Login.aspx")
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "loginBtnn")));
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                  
                          search_field = driver.find_element_by_id("txtUserName")
                          search_field.clear()
                          search_field.send_keys(password)
                          time.sleep(5)
                          driver.find_element_by_id("BtnLogin").click()
                          self.logSignal.emit('Clicked on Login')
                          time.sleep(5)
                          try:
                              element = driver.find_element_by_xpath("http://span[contains(@id,'lblFailure')]")
                              if element.text == "Invalid User Name or Password":
                                  self.logSignal.emit("Invalid User Name or Password")
                                  self.invalidSignal.emit()
                                  driver.quit()
                                  driver.close()
                          except NoSuchElementException:
                              self.logSignal.emit("Correct User Name or Password")
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.XPATH, "/html/body/form/div[4]/a/img")));
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')    
                          driver.find_element_by_xpath("/html/body/form/div[4]/a/img").click()
                          self.logSignal('Clicked Product Links')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "lnkFuse")));
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          driver.find_element_by_id("lnkFuse").click()
                          self.logSignal.emit('Clicked on Fuse Link')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.XPATH, "http://span[@class='Invoice Processing'][contains(.,'Invoice Processing')]")));
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          element_to_hover_over = driver.find_element_by_xpath("http://span[@class='Invoice Processing'][contains(.,'Invoice Processing')]")
                          hover = ActionChains(driver).move_to_element(element_to_hover_over)
                          hover.perform()
                          self.logSignal.emit('Clicked on Invoice Processing')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.XPATH, "http://a[@href='../../RS/Batch/AuditInvoice.aspx']")))
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          driver.find_element_by_xpath("http://a[@href='../../RS/Batch/AuditInvoice.aspx']").click()
                          self.logSignal.emit('Clicked on Audit Invoices')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "MainContent_ddlSearchInvoiceStatus")))
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          invoice_audit = 'Audited' 
                          InvoiceStatus = Select(driver.find_element_by_id("MainContent_ddlSearchInvoiceStatus"))
                          for option in InvoiceStatus.options:
                              option_text = option.text
                              if invoice_audit in option_text:
                                  option.click()
                                  break
                          self.logSignal.emit('Selected Audited from Dropdown')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "MainContent_btnSearch")))
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          driver.find_element_by_id('MainContent_btnSearch').click() 
                          self.logSignal.emit('Clicked on Search Button')
                          try:
                              WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "MainContent_ddlItemsPerPage")))
                          except TimeoutException:
                              self.logSignal.emit('Timed out waiting for page to load')
                          element = driver.find_element_by_id('MainContent_ddlItemsPerPage')
                          element.location_once_scrolled_into_view
                          driver.find_element_by_id('MainContent_ddlItemsPerPage').click() 
                          items_perpage = '500' 
                          records_list = Select(driver.find_element_by_id("MainContent_ddlItemsPerPage"))
                          for option in records_list.options:
                              option_text = option.text
                              if items_perpage in option_text:
                                  option.click()
                                  break
                          time.sleep(5)
                          self.logSignal.emit('Selected Max items per page')
                          list_links = driver.find_elements_by_partial_link_text('Generate')
                          time.sleep(5)
                          id_list = []
                          for i in list_links:
                              data = i.get_attribute('id')
                              self.logSignal.emit(data)
                              id_list.append(data)
                              # TODO
                              id_df = pd.DataFrame(id_list)
                              self.logSignal.emit(id_df.to_string())
                          for row in id_df.values:
                              row_val = str(row)[2:-2]
                              try:
                                  WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, "MainContent_gvAuditInvoice")))
                                  self.logSignal.emit('Element Found')
                                  element = driver.find_element_by_id(row_val)
                                  element.location_once_scrolled_into_view
                                  WebDriverWait(driver, 60000).until(EC.element_to_be_clickable((By.ID, row_val)))
                                  driver.find_element_by_id(row_val).click()
                                  localtime = time.strftime("%m-%d-%Y  %I:%M:%S")
                                  self.logSignal.emit(row_val + "|" + 'Clicked' + '|' + localtime)
                                  time.sleep(5)
                              except ElementClickInterceptedException:
                                  continue
                                  self.logSignal.emit('Timed out waiting for page to load')
                              time.sleep(5)
                          self.logSignal.emit('Completed')
                          self.finished.emit()
                  
                      @QtCore.pyqtSlot()
                      def load_data(self):
                          completed = 0
                          while completed < 100:
                              completed += 0.0001
                              self.progressChanged.emit(completed)
                              time.sleep(0.01)
                  

                  ma??in.py

                  import threading
                  from PyQt5 import QtCore, QtGui, QtWidgets
                  
                  from fuse_worker import FusiWorker
                  from fuse_ui import Ui_Fuse
                  
                  class Fuse(QtWidgets.QDialog, Ui_Fuse):
                      def __init__(self, parent=None):
                          super(Fuse, self).__init__(parent)
                          self.setupUi(self)
                          self.setWindowFlags(QtCore.Qt.CustomizeWindowHint | 
                                               QtCore.Qt.MSWindowsFixedSizeDialogHint |
                                               QtCore.Qt.WindowCloseButtonHint | 
                                               QtCore.Qt.WindowMinimizeButtonHint)
                          self.init()
                          self.connections()
                  
                      def init(self):
                          self._worker = FusiWorker()
                          self.reset()
                          thread = QtCore.QThread(self)
                          thread.start()
                          self._worker.moveToThread(thread)
                          self.progressBar.setValue(0)
                  
                      def connections(self):
                          self.submitButton.clicked.connect(self.submit)
                          self.resetButton.clicked.connect(self.reset)
                          self._worker.logSignal.connect(self.logTextEdit.insertPlainText)
                          self._worker.invalidSignal.connect(self.invalidate)
                          self._worker.finished.connect(self.reset)
                          self._worker.progressChanged.connect(self.progressBar.setValue)
                          self.progressBar.setValue(0)
                  
                      @QtCore.pyqtSlot()
                      def submit(self):
                          username = self.userNameLineEdit.text()
                          password = self.passwordLineEdit.text()
                          self.logTextEdit.clear()
                          self.userNameLineEdit.setEnabled(False)
                          self.passwordLineEdit.setEnabled(False)
                          threading.Thread(target=self._worker.start, args=(username, password,), daemon=True).start()
                          threading.Thread(target=self._worker.load_data, daemon=True).start()
                  
                      @QtCore.pyqtSlot()
                      def reset(self):
                           self.userNameLineEdit.clear()
                           self.passwordLineEdit.clear()
                           self.invalidLabel.hide()
                           self.userNameLineEdit.setEnabled(True)
                           self.passwordLineEdit.setEnabled(True)
                           self.submitButton.setEnabled(True)
                  
                      @QtCore.pyqtSlot()
                      def invalidate(self):
                          self.invalidLabel.show()
                          self.reset()
                  
                  if __name__ == "__main__":
                      import sys
                      app = QtWidgets.QApplication(sys.argv)
                      w = Fuse()
                      w.show()
                      sys.exit(app.exec_())
                  

                  這些文件必須在同一個文件夾中:

                  These files must be in the same folder:

                  ├── fuse_ui.py
                  ├── fuse_worker.py
                  └── main.py
                  

                  這篇關(guān)于帶有 Selenium 的應(yīng)用程序不響應(yīng) - 不顯示進度條,也不在控制臺中發(fā)出文本,直到任務(wù)完成的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

                  【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

                  相關(guān)文檔推薦

                  How to bind a function to an Action from Qt menubar?(如何將函數(shù)綁定到 Qt 菜單欄中的操作?)
                  PyQt progress jumps to 100% after it starts(PyQt 啟動后進度躍升至 100%)
                  How to set yaxis tick label in a fixed position so that when i scroll left or right the yaxis tick label should be visible?(如何將 yaxis 刻度標簽設(shè)置在固定位置,以便當(dāng)我向左或向右滾動時,yaxis 刻度標簽應(yīng)該可見
                  `QImage` constructor has unknown keyword `data`(`QImage` 構(gòu)造函數(shù)有未知關(guān)鍵字 `data`)
                  Change x-axis ticks to custom strings(將 x 軸刻度更改為自定義字符串)
                  How to show progress bar while saving file to excel in python?(如何在python中將文件保存為excel時顯示進度條?)

                      <bdo id='iEjgj'></bdo><ul id='iEjgj'></ul>
                      <legend id='iEjgj'><style id='iEjgj'><dir id='iEjgj'><q id='iEjgj'></q></dir></style></legend>

                      1. <small id='iEjgj'></small><noframes id='iEjgj'>

                          <tbody id='iEjgj'></tbody>
                          • <tfoot id='iEjgj'></tfoot>
                          • <i id='iEjgj'><tr id='iEjgj'><dt id='iEjgj'><q id='iEjgj'><span id='iEjgj'><b id='iEjgj'><form id='iEjgj'><ins id='iEjgj'></ins><ul id='iEjgj'></ul><sub id='iEjgj'></sub></form><legend id='iEjgj'></legend><bdo id='iEjgj'><pre id='iEjgj'><center id='iEjgj'></center></pre></bdo></b><th id='iEjgj'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='iEjgj'><tfoot id='iEjgj'></tfoot><dl id='iEjgj'><fieldset id='iEjgj'></fieldset></dl></div>
                          • 主站蜘蛛池模板: 欧美精品电影一区 | 欧美色综合网 | 亚洲精品在线播放 | 国产精品一区二区欧美 | 亚洲www啪成人一区二区麻豆 | 91视频观看 | 91精品国产综合久久精品 | 二区av | 日韩成人在线观看 | 亚洲免费视频播放 | 日韩视频中文字幕 | 成人影院一区二区三区 | 日本天天操| 国产伦一区二区三区 | av免费网址| 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | zzzwww在线看片免费 | 国产亚洲区 | 日韩成人精品一区二区三区 | av小说在线 | 国产精品一区一区三区 | 亚洲精品欧美 | 丁香久久 | 九九热在线观看 | 国产精品黄视频 | 成人精品一区亚洲午夜久久久 | 国产视频2021 | 黄色在线免费播放 | 狠狠久久久| 日韩国产高清在线观看 | 在线播放亚洲 | 91久久久久久 | 日韩在线欧美 | 可以在线观看av的网站 | 国产aa| 特级生活片| 国产精品成人免费 | 久久精品国产免费一区二区三区 | 日本在线网站 | 精品在线观看一区二区 | 韩日一区二区三区 |