如何使用Python在Selenium中并发运行多个webdriver进程?

如何使用Python在Selenium中并发运行多个webdriver进程?,python,python-3.x,selenium-webdriver,concurrency,Python,Python 3.x,Selenium Webdriver,Concurrency,我有一个数千个URL的列表。我想使用Python/Selenuim来: 加载每个URL 选择一个元素 关闭页面 为了让它运行得更快,我想并行运行很多这样的进程,但我只能一次解决一个问题 from selenium import webdriver driver = webdriver.Chrome() url_list = [ 'https://www.instagram.com/p/Bj7NmpqBuSw/?tagged=style', 'h

我有一个数千个URL的列表。我想使用Python/Selenuim来:

  • 加载每个URL
  • 选择一个元素
  • 关闭页面
  • 为了让它运行得更快,我想并行运行很多这样的进程,但我只能一次解决一个问题

    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])
    
    但是手柄有点难以管理

    如何并行运行此进程?

    您可以使用循环并行。示例用法:

    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
    
    您可以使用来并行循环。示例用法:

    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
    

    tl;dr我创建了一个简单的示例,说明如何并行运行简单的Selenium任务。你可以根据自己的目的调整它


    并行化Selenium脚本的问题在于,Selenium Worker本身就是进程。上面的脚本使用两个,一个存储空闲Selenium Worker的ID,另一个存储要传递给Worker的数据。后台主线程侦听这两个队列,并将传入的数据分配给空闲的工作线程,在工作线程执行其工作时将selenium工作线程的ID从工作队列中移除


    要使代码适应您的目的,您需要做的就是更改函数中的代码。希望这有帮助

    tl;dr我创建了一个简单的示例,说明如何并行运行简单的Selenium任务。你可以根据自己的目的调整它


    并行化Selenium脚本的问题在于,Selenium Worker本身就是进程。上面的脚本使用两个,一个存储空闲Selenium Worker的ID,另一个存储要传递给Worker的数据。后台主线程侦听这两个队列,并将传入的数据分配给空闲的工作线程,在工作线程执行其工作时将selenium工作线程的ID从工作队列中移除


    要使代码适应您的目的,您需要做的就是更改函数中的代码。希望这有帮助

    你也可以使用线程,python的线程模块简单而内置。你也可以使用线程,python的线程模块简单而内置