Распараллеливание с использованием Selenium в Python - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь распараллелить выполнение цикла, который извлекает данные с веб-сайта с использованием селена.В моем цикле я зацикливаюсь на списке URL URLlist, который я создал ранее.

Сначала я захожу на страницу и таким образом создаю экземпляр веб-драйвера.

browser = webdriver.Chrome(executable_path='chromedriver.exe')
browser.get('https://somepage.com')
username = browser.find_element_by_id("email")
password = browser.find_element_by_id("password")
username.send_keys("foo@bar.com")
password.send_keys("pwd123")
browser.find_element_by_id("login-button").click()

Затем мойцикл запускается и вызывает некоторые функции, которые работают на странице.

for url in URLlist:
   browser.get(url)
   data1 = do_stuff()
   data2 = do_other_stuff()

Я не совсем знаю, с чего начать, потому что могу представить, что мне нужен экземпляр веб-драйвера для каждого потока.

Какой правильный (и, возможно, самый простой) способ сделать это?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Чтобы упростить создание веб-страниц, вам нужно установить numpy.

python -m pip install numpy

После этого вы сможете легко достичь желаемого.Вот простой пример:

import threading
import numpy as np

#tupel to save the Threads
threads = []

threadCount = 5 #Number of Threads you want

#Custom Thread class 
class doStuffThread(threading.Thread):
    def __init__(self, partLinks):
        threading.Thread.__init__(self)
        self.partLinks = partLinks
    def run(self):
        #New browser instance for each Thread
        browser = webdriver.Chrome(executable_path='chromedriver.exe')
        for link in self.partLinks:
            browser.get(link)
            doStuff(link)
            doOtherStuff(link)

#Split the links to give each thread a part of them
for  partLinks in np.array_split(links,threadCount):
     t = CommentCrawlerThread(partlinks)
     threads.append(t)
     t.start()
#wait till all Threads are finished
for x in threads:
    x.join()
0 голосов
/ 25 апреля 2019

Вам нужно будет создать свои методы тестирования в отдельном файле .py, установить пакет библиотеки pytest и вызвать ваш файл .py с помощью pytest. Запустите python из cmd и попробуйте что-нибудь из этого:

-m pytest -n 3 C:\test_file.py --html=C:\Report.html

В этом случае 3 метода тестирования будут выполняться параллельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...