Selenium создает несколько потоков Chrome для каждого элемента в массиве (списке) и выполняет функцию одновременно - PullRequest
2 голосов
/ 10 мая 2019

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

import sys

def spotify(elem1, elem2, elem3):

    print("proxy: {}, cc: {}, cvc: {}".format(elem1, elem2, elem3))


def get_cc():
    cc = ['5136154545452522', '51365445452823', '51361265424522']
    return cc

def get_cvc():
    cvc = ['734', '690', '734']
    return cvc

def get_proxies():
    proxies = ['51.77.545.171:8080', '51.77.254.171:8080', '51.77.258.82:8080']
    return proxies

proxArr = get_proxies()
ccArr = get_cc()
cvcArr = get_cvc()
yeslist = ['y','yes']

for elem in zip(proxArr, ccArr, cvcArr):
    spotify(elem[0], elem[1], elem[2])
    restart=input("Do you wish to start again: ").lower()
    if restart not in yeslist:
        sys.exit("Exiting")

1 Ответ

2 голосов
/ 11 мая 2019

Аналогично ответу здесь , вы можете запустить несколько тем Chrome.

  • Определите функцию, которая выполняет ваш код Selenium, execute_chrome в данном случае
  • Добавить все необходимые аргументы в определение функции
  • Передайте аргументы как кортеж в вашем вызове Thread, например args=(elem, )
  • Сохраните скрипт с именем, которое не совпадает с другим пакетом Python, например my_selenium_tests.py
  • запускать сценарий предпочтительно из командной строки, а не из интерактивной среды (например, записной книжки Jupyter)

    from selenium import webdriver
    import threading
    import random
    import time
    
    number_of_threads = 4
    
    def execute_chrome(url):
        chrome = webdriver.Chrome()
        chrome.get(url)
        time.sleep(1 + random.random() * 5)
        driver.quit()
    
    urls = ('https://www.google.com', 
            'https://www.bing.com', 
            'https://www.duckduckgo.com', 
            'https://www.yahoo.com')
    
    threads = []
    for i in range(number_of_threads):
        t = threading.Thread(target=execute_chrome, args=(urls[i], ))
        t.start()
        threads.append(t)
    
    for thread in threads:
        thread.join()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...