Как я могу одновременно запустить несколько процессов Webdriver в Selenium, используя Python? - PullRequest
0 голосов
/ 12 июня 2018

Программирование NooB, пожалуйста, будьте осторожны.: -)

У меня есть список тысяч URL-адресов.Я хочу использовать Python / Selenuim для:

  1. загрузки каждого URL,
  2. выбора одного элемента
  3. закрытия страницы

Длячтобы он работал быстрее, я хочу запускать множество этих процессов параллельно, но я могу понять, как это сделать по одному.

from selenium import webdriver
driver = webdriver.Chrome()

url_list = [
            'https://www.instagram.com/p/Bj7NmpqBuSw/?tagged=style', 
            'https://www.instagram.com/p/Bj7Nic3Au85/?tagged=style'
            ]

for url in url_list:
    driver.get(url)
    driver.find_elements_by_class_name("class-name-for-profile-link")
    driver.close()

Я пытался использовать множество вкладок браузера

driver.switch_to.window(driver.window_handles[1])

но с ручками немного сложно управлять.

Как я могу запустить этот процесс параллельно?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

tl; dr Я создал эту суть , чтобы дать простой пример того, как выполнять простые задачи Selenium параллельно.Вы можете адаптировать его к своим собственным целям.


Проблема с распараллеливанием скриптов Selenium заключается в том, что работники Selenium сами являются процессами.В приведенном выше сценарии используются две очереди FIFO , одна из которых хранит идентификаторы незанятых рабочих Selenium, а другая - данные, которые передаются рабочим.Фоновые главные потоки прослушивают обе эти очереди и назначают входящие данные незанятым работникам, убирая идентификатор работников селена из очереди работника, пока работник выполняет свою работу.

Все, что вам нужно сделать, чтобы адаптировать код к вашим целям, это изменить код в функции selenium_task.Надеюсь, это поможет!

0 голосов
/ 12 июня 2018

Вы можете использовать это для параллельного цикла.Пример использования:

from joblib import Parallel, delayed

def do_stuff(url):
    phantom = webdriver.PhantomJS('/path/to/phantomjs') # you can use any driver
    phantom.get(url)
    # do your stuff
    phantom.close()

Parallel(n_jobs=-1)(delayed(do_stuff)(url) for url in urls) #execute parallel for all urls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...