Хочу в свой парсер добавить прогресс бар, чтобы при завершении прохода страницы шкала прогресса заполнялась, но как и в случае с label во время парсера, приложение не отвечает, пока работает парсер. Как можно исправить это? Или это особенности работы парсера и реализовать такое в принципе не выйдет?
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from openpyxl import load_workbook
from openpyxl.styles import Alignment
import requests
import pandas as pd
import time
from tkinter import *
from tkinter import ttk
region_name = ["Любая", "Брестская", "Витебская", "Гомельская", "Гродненская", "Минск", "Минская", "Могилевская"]
def update_region_options(event):
# Получаем выбранную область
selected_region = combobox_rg_name.get()
def parser_vacancies():
label_status.config(text="Поиск вакансий...")
root.update_idletasks() # Обновляем интерфейс
# Код парсера
progress_bar["maximum"] = max_page
label_status.config(text=f"Найдено страниц: {max_page}")
root.update_idletasks()
for page in range(1, max_page + 1):
# print(f"Сбор данных со страницы {page}...")
label_status.config(text=f"Сбор данных со страницы {page}...")
root.update_idletasks()
current_url = driver.current_url.split("&page=")[0] # Убираем старый номер страницы из URL
new_url = f"{current_url}&page={page}"
driver.get(new_url)
time.sleep(3)
# Код парсера
# Обновляем статус прогресса
progress_label.config(text=f"Обработано {page} из {max_page} страниц")
progress_bar["value"] = page
root.update_idletasks()
driver.quit()
# Код форматирования excel файла
progress_label.config(text="Готово!")
root.update_idletasks()
root = Tk()
root.title("Парсер вакансий")
root.geometry("350x400")
root.resizable(False, False)
root.iconbitmap(default="parser.ico")
region_var = StringVar(value=region_name[0])
label_vacancy = ttk.Label(text="Введите интересующую вакансию:", font=("Arial", 11))
label_vacancy.pack()
entry_vacancy = ttk.Entry()
entry_vacancy.pack(pady=5)
label_region = ttk.Label(text="Выберите область:", font=("Arial", 11))
label_region.pack()
combobox_rg_name = ttk.Combobox(textvariable=region_var, values=region_name, state="readonly")
combobox_rg_name.bind('<<ComboboxSelected>>', update_region_options) # Обновляем регионы при изменении области
combobox_rg_name.pack(pady=5)
label_district = ttk.Label(text="Выберите район:", font=("Arial", 11))
label_district.pack()
combobox_dist_name = ttk.Combobox(textvariable='Любой', state="readonly")
combobox_dist_name.pack()
btn = ttk.Button(text="Поиск", command=parser_vacancies)
btn.pack()
label_status = ttk.Label()
label_status.pack()
# Добавляем прогресс-бар в окно
progress_label = ttk.Label(root, text="Прогресс: 0%", font=("Arial", 12))
progress_label.pack()
progress_bar = ttk.Progressbar(root, length=300, mode="determinate")
progress_bar.pack()
root.mainloop()