Из-за чего возникает ошибка в коде selenium
В коде на selenium python после нажатия на кнопку "START" открывается браузер с вкладкой "Google", но еще я попробовал сделать через библиотеку schedule так, чтоб каждый день в 15:38 браузер открывал еще одну вкладку с "Yahoo". Почему я получаю такую ошибку как:
"self.job_func = functools.partial(job_func, *args, **kwargs) TypeError: the first argument must be callable" ?
Хочу помощи именно на счет selenium
from PyQt5 import QtCore, QtGui, QtWidgets
import schedule
from selenium import webdriver
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(417, 171)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(80, 30, 271, 111))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "START"))
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.Browser)
def Browser(self):
button = self.sender()
if button.text() == 'START':
self.pushButton.setText("STOP")
browser = webdriver.Chrome("C:/python/chromedriver.exe")
browser.get('https://google.com')
schedule.every().day.at("15:38").do(browser.execute_script("window.open('https://www.yahoo.com')"))
else:
close()
self.pushButton.setText("START")
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion')
window = ExampleApp()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Судя по коду приведённому в вопросе Почему я получаю ошибку? pyqt5 schedule selenium ошибка возникает не из-за Selenium, а из-за не вполне корректного использования библиотеки schedule.
В документации библиотеки сказано:
https://schedule.readthedocs.io/en/stable/api.html#main-interface
do(job_func, *args, **kwargs)[source]
Specifies the job_func that should be called every time the job runs.
Any additional arguments are passed on to job_func when the job runs.
Parameters: job_func – The function to be scheduled
Returns: The invoked job instance
job_func – The function to be scheduled
Вы же передаёте не функцию, а результат выполнения функции.
Иными словами, вместо строки
schedule.every().day.at("15:38").do(browser.execute_script("window.open('https://www.yahoo.com')"))
следует писать
schedule.every().day.at("15:38").do(browser.execute_script, "window.open('https://www.yahoo.com')")