如何解决在后台运行调度程序,使用Python在“停止”按钮上停止进程
我需要将进程作为后台任务运行,并在用户单击停止按钮(实际上在后台运行的终止循环)时停止,因为进程正在进行中,因此无法单击停止按钮,这就是无法杀死进程的原因。此外,我需要在单线程中运行它(当前它会创建多个窗口),只需创建一个进程即可在其中打开窗口并执行其执行,除非用户按下停止按钮,否则该功能将继续
import json
import sys
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QImage,QPalette,QBrush
from PyQt5.QtWidgets import *
import xlrd as xlrd
from bs4 import BeautifulSoup
import time
import threading
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# CHROMEDRIVER_PATH = "driver/chromedriver"
CHROMEDRIVER_PATH = "driver/chromedriver"
def from_browser():
chromeoptions = webdriver.ChromeOptions()
chromeoptions.add_argument('--disable-notifications')
chromeoptions.add_argument('--disable-dev-shm-usage')
chromeoptions.add_argument('--shm-size=2g')
chromeoptions.add_argument('--no-sandbox')
chromeoptions.add_argument('--ignore-certificate-errors')
browser = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=chromeoptions)
return browser
def Login(): # username,password):
loc = ("List.xlsx")
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)
sheet.cell_value(0,0)
index = 1
row = sheet.row_values(index)
user_name = row[0]
password = row[1]
print(user_name)
print(password)
browser = from_browser()
browser.implicitly_wait(10)
browser.get("https://www.homeworkmarket.com/teacher-login")
browser.find_element_by_xpath("/html/body/div[4]/div/div/form/div[1]/input").send_keys(user_name)
time.sleep(1)
browser.find_element_by_xpath("/html/body/div[4]/div/div/form/div[2]/input").send_keys(password)
time.sleep(1)
browser.find_element_by_xpath("/html/body/div[4]/div/div/form/button").click()
time.sleep(1)
return browser
def main():
link_list = []
browser = Login()
browser.get("https://www.homeworkmarket.com/api/questions?offset=0&limit=7")
soup = BeautifulSoup(browser.page_source,'html.parser').text
# print(soup.text)
rem = soup.replace('\n','')
load = json.loads(rem)
for data in load['data']:
title = data['path']['path']
link_list.append("https://www.homeworkmarket.com" + str(title))
return link_list,browser
def single_bid_fun(single_bid,browser):
browser.get(single_bid)
soup = BeautifulSoup(browser.page_source,'html.parser').text
rem = soup.replace('\n','')
load = json.loads(rem)
username = load['question']['user']['username']
anchor = load['question']['fieldOfStudy']['anchor']
budget = load['question']['budget']
print(budget)
divide = budget / 2
print(divide)
bid_dic = {
"username": username,"anchor": anchor,"divide": divide
}
return bid_dic
def send_perposal(browser,perposal,price):
browser.find_element_by_css_selector("#main-question > button").click()
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(1) > input").send_keys(
Keys.CONTROL + "a")
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(1) > input").send_keys(
Keys.DELETE)
time.sleep(1)
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(1) > input").send_keys(str(price))
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(2) > input").send_keys(
Keys.CONTROL + "a")
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(2) > input").send_keys(
Keys.DELETE)
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div:nth-child(2) > input").send_keys(
str(price),)
browser.find_element_by_css_selector(
"body > div:nth-child(6) > div > div > form > div.css-17vsaq9 > div.css-1xn3edc > div > textarea").send_keys(
str(perposal))
browser.find_element_by_css_selector("body > div:nth-child(6) > div > div > form > input").click()
time.sleep(1)
# hassan code
class MainWindow(QMainWindow):
def __init__(self):
QWidget.__init__(self)
self.setWindowTitle('Homework Market')
self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False)
# self.setStyleSheet()
self.setGeometry(100,200,300,200)
self.process_start = True
# add background image & styles for window layout
oImage = QImage("background.jpg")
sImage = oImage.scaled(QSize(500,300)) # resize Image to widgets size
palette = QPalette()
palette.setBrush(QPalette.Window,QBrush(sImage))
self.setPalette(palette)
self.label = QLabel('Homework Market',self) # test,if it's really backgroundimage
self.label.setStyleSheet("color: white; font-size: 22px")
self.label.setGeometry(55,20,50)
# creating drop down menu
wid = QtWidgets.QWidget(self)
self.setCentralWidget(wid)
layout = QtWidgets.QHBoxLayout()
self.cb = QComboBox()
self.cb.addItem("Select Budget Limit")
self.cb.addItems(["$1","$5","$10","$15","$20","$30","$40","$50","$60","$70"])
self.cb.currentIndexChanged.connect(self.selectionchange)
self.cb.setStyleSheet("width:100%;height:20%")
self.cb.setGeometry(100,50,150,40)
layout.addWidget(self.cb)
wid.setLayout(layout)
# creating a start button
start_button = QPushButton("Start",self)
start_button.setGeometry(50,120,80,40)
start_button.setStyleSheet("background-color : rgb(0,170,255);color: rgb(255,255,255);font-weight:bold")
start_button.clicked.connect(self.start_enabled)
# creating a stop button
cancel_button = QPushButton("Stop",self)
cancel_button.setGeometry(140,40)
cancel_button.setStyleSheet("background-color : rgb(255,64,16);color: rgb(255,255);font-weight:bold")
cancel_button.clicked.connect(lambda: self.stop_enabled("stop"))
self.show()
def selectionchange(self,i):
print("Current index",i,"selection changed ",self.cb.currentText())
# action method
def start_enabled(self):
while self.process_start and self.stop_enabled:
threading.Thread(target=self.hit_and_check).start()
continue
def stop_enabled(self,process):
if process != 'stop':
return True
print('button stop call')
self.process_start = False
sys.exit()
def hit_and_check(self):
if self.process_start and self.stop_enabled:
list,browser = main()
for link in list:
try:
split_single_bid = link.split("https://www.homeworkmarket.com/questions/")[1]
single_bid = "https://www.homeworkmarket.com/api/object?path=%2Fquestions%2F" + split_single_bid
message = single_bid_fun(single_bid,browser)
browser.implicitly_wait(15)
browser.get(link)
# check_bid=browser.find_element_by_xpath("//*[@id='main-question']/a/span").text
check_bid = browser.find_element_by_class_name("css-10op2pj").text
# check_bid=browser.find_element_by_css_selector("#main-question > button").text
time.sleep(1)
if check_bid == "Place bid!":
fin = open("message","r")
file_text = fin.read()
perposal = file_text.replace("{username}",message['username']).replace("{FIELD}",message['anchor'])
# print(perposal)
fin.close()
price = str(message['divide'])
send_perposal(browser,price)
print("======================================")
pass
else:
print("hre ")
browser.quit()
# break
except:
pass
browser.quit()
else:
sys.exit()
# Ends
if __name__ == '__main__':
app = QApplication(sys.argv)
oMainwindow = MainWindow()
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。