открытие второго окна с помощью незамеченного chromedriver selenium, python

#python #selenium #selenium-webdriver #webdriver #selenium-chromedriver

Вопрос:

Я пытаюсь открыть два или более отдельных окна.

Я смог открыть первое окно, запустив

 from selenium import webdriver
import undetected_chromedriver.v2 as uc

options = webdriver.ChromeOptions()
options.add_argument(r"--user-data-dir=C:UsersusernameAppDataLocalGoogleChromeUser Data")

drivers = list()
drivers.append(uc.Chrome(options=options))
 

Теперь я попытался открыть второе окно, просто повторив последнюю строку ( drivers.append(uc.Chrome(options=options)) ), но оно вернулось

 RuntimeError: you cannot reuse the ChromeOptions object
 

Поэтому я попытался

 options = webdriver.ChromeOptions()
options.add_argument(r"--user-data-dir=C:UsersusernameAppDataLocalGoogleChromeUser Data")

drivers.append(uc.Chrome(options=options))
 

На этот раз он вернулся

 WebDriverException: unknown error: cannot connect to chrome at 127.0.0.1:54208
from chrome not reachable
 

Как я могу это исправить?

Комментарии:

1. Ты уже нашел решение?

2. К сожалению, нет

3. Я только что сделал это с undetected-chromedriver v1 , посмотрите и дайте мне знать, если это сработает

Ответ №1:

Это сработало для меня , я не мог использовать v2, но это работает в v1.

     import undetected_chromedriver as uc  
    uc.install(executable_path=PATH,)
    drivers_dict={}   
    def scraping_function(link):
            try:
                thread_name= threading.current_thread().name
                    #sometime we are going to have different thread name in each iteration so a little regex might help
                thread_name = re.sub("ThreadPoolExecutor-(d*)_(d*)", r"ThreadPoolExecutor-0_2", thread_name)
                print(f"re.sub -> {thread_name}")
                driver = drivers_dict[thread_name]
            except KeyError:
                drivers_dict[threading.current_thread().name] = uc.Chrome(options=options,executable_path=PATH)
                driver = drivers_dict[threading.current_thread().name]
            driver.get(link)