Home > Software design >  How to implement the same two browser instances all the time and put different links in each?
How to implement the same two browser instances all the time and put different links in each?

Time:06-18

I have this example of code:

import concurrent.futures    
from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

links = ['https://en.wikipedia.org/wiki/File:Mechanitis_Polymnia_Chrysalis.jpg',
    'https://en.wikipedia.org/wiki/File:William_Cornwallis_as_Admiral_(cropped).jpg',
    'https://en.wikipedia.org/wiki/File:Battle_of_Saint_Charles.jpg',
    'https://en.wikipedia.org/wiki/File:Stephen_Curry_Shooting_(cropped)_(cropped).jpg']

def open(url):
    chromeOptions = webdriver.ChromeOptions()
    driver = webdriver.Chrome(options=chromeOptions)
    driver.get(url)
    print(' ')

with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex:
    for link in links:
        ex.submit(open, link)

Everything works well, and different links are pasted into each browser, which is what I want. But each time, new browser windows are created.

How to implement the same two browser instances all the time and put different links in each?

CodePudding user response:

I modified your code a little using the same driver instead of opening a new one and it's working

from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

links = ['https://en.wikipedia.org/wiki/File:Mechanitis_Polymnia_Chrysalis.jpg',
         'https://en.wikipedia.org/wiki/File:William_Cornwallis_as_Admiral_(cropped).jpg',
         'https://en.wikipedia.org/wiki/File:Battle_of_Saint_Charles.jpg',
         'https://en.wikipedia.org/wiki/File:Stephen_Curry_Shooting_(cropped)_(cropped).jpg']


def open(url, index):
    drivers[index].execute_script(f"window.open('{url}','_self')")
    print(' ')


NB_WINDOWS = 2
chromeOptions = webdriver.ChromeOptions()
drivers = []
for i in range(NB_WINDOWS):
    drivers.append(webdriver.Chrome(options=chromeOptions))

print("Drivers : ", len(drivers))

with ThreadPoolExecutor(max_workers=2) as ex:
    i = 0
    for link in links:
        ex.submit(open, link, i % NB_WINDOWS)
        i = i 1
  • Related