Run multiple web browsers simultaneously Selenium Python 3

江枫思渺然 提交于 2020-05-17 07:17:26

问题


I'm attempting to open multiple chrome drivers at once and have it run as fast as possible. It opens the first page, and it has to load completely before the second function executes with "browser_2".
Is there a way to make these functions load at the same time?

notice - I'm hiding "Proxy_list" from my post to protect those ips for this post.

browser_1 = 0
browser_2 = 1
browser_3 = 2
browser_4 = 3
browser_5 = 4
browser_6 = 5
browser_7 = 6
browser_8 = 7
browser_9 = 8
browser_10 = 9
Link_1 = "https://www.google.com"

session_list = [browser_1, browser_2, browser_3, browser_4, browser_5, browser_6, browser_7, browser_8, browser_9, browser_10]



def create_browser(browser):
    options = webdriver.ChromeOptions()
    options.add_argument('--proxy-server=%s' % (Proxy_list[browser]))
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    print("opening session #" + str(browser+ 1))
    # Defines Browser
    browser = webdriver.Chrome(options=options)
    browser.get(Link_1)
    return browser


create_browser(browser_1)
create_browser(browser_2)
create_browser(browser_3)
create_browser(browser_4)
create_browser(browser_5)

回答1:


Here is the sample code.

I have tried and it would open multiple browsers at same time.

from selenium import webdriver
from multiprocessing import Process, Pipe, Pool

def create_browser(num):
    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    # Defines Browser
    browser = webdriver.Chrome(options=options)
    browser.get('https://mail.google.com/')

    return browser


pool = Pool(processes=10)  # Maximum number of browsers opened at same time

for i in range(0, 5):  # Five browsers will be created
    async_result = pool.apply_async(create_browser, args=(i))

pool.close()
pool.join()

Updated:

You can pass parameter like below.

def test_function(x, y, z=0):
    # do something

...

async_result = pool.apply_async(test_function, args=(1, 2), kwds={'z':3})  # x=1, y=2, z=3

In your case:

session_list = [browser_1, browser_2, browser_3, browser_4, browser_5, browser_6, browser_7, browser_8, browser_9, browser_10]

pool = Pool(processes=10)  # Maximum number of browsers opened at same time

for i in range(0, len(session_list)):  # Ten browsers will be created
    async_result = pool.apply_async(create_browser, args=(session_list[i]))

pool.close()
pool.join()


来源:https://stackoverflow.com/questions/60087760/run-multiple-web-browsers-simultaneously-selenium-python-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!