Оптимизация потоков с помощью selenium

#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, здесь мало что можно сделать.