#python #multithreading #selenium #tkinter #python-multithreading
#python #многопоточность #селен #tkinter #python -многопоточность
Вопрос:
Моя цель:
Я использую for
цикл для запуска нескольких потоков selenium scripts. Все эти сценарии одинаковы и следуют основным принципам selenium
- нажатие кнопки
- отправка текста в текстовые поля
- ожидание, пока элемент станет интерактивным или видимым
- и использование
time.sleep()
для имитации человеческого поведения.
Все эти сценарии должны быть завершены в течение двух минут,
- например, я запускаю цикл в 6:00 вечера, все потоки должны быть завершены в 6:02 вечера
Обратите внимание, что выполнение каждого сценария занимает 1-1, 5 минуты, поэтому мой вопрос не об увеличении времени выполнения сценария
Моя проблема:
Когда я запускаю свой код, он работает, и все в порядке, но я чувствую, что он не оптимизирован так сильно.
Например, обычно при запуске моих потоков на моем указателе мыши появляется синий круг загрузки, поэтому я знаю, что потоки загружают процессор.
Поскольку я запускаю свои потоки selenium с графическим интерфейсом Tkinter, я не хочу, чтобы потоки вызывали задержку или замедляли работу графического интерфейса.
Итак, наконец, мой вопрос в том, как мне оптимизировать потоки с помощью selenium.
Я создал минимально воспроизведенный пример моего исходного кода.
import threading
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
class go(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
options = webdriver.ChromeOptions()
options.add_argument('--headless', )
self.browser = webdriver.Chrome('chromedriver.exe',options=options)
self.browser.get('https://www.wikipedia.org/')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.ID, "searchInput"))).send_keys('Python',Keys.ENTER)
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Computing"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "People"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Roller coasters"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Vehicles"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Weaponry"))).click()
time.sleep(100)
for count in range(70):
go().start()
Комментарии:
1. Вы запускаете 70 процессов Chrome одновременно, так что да, определенно ожидайте, что процессор перейдет на 100%. Кроме возни с флагами chrome, здесь мало что можно сделать.