Multiprocessing, selenium. Не могу закрыть ненужные браузеры после завершения цикла

Не могу закрыть ненужные браузеры после завершения цикла!
os.system("taskkill /pid chromedriver.exe /f") - решает проблему, но, когда цикл идет по второму кругу, он выдает ошибки типа [WinError 10054], [WinError 10061] и просто останавливает процесс. Как видите, тестил много чего, но того, чего хотел не нашел. Надо, чтобы после окончания цикла заметались все следы и запускались новые процессы.

def main():
  while True:
    get_item()
    get_url_json()
    get_url_post()
    p = Pool(processes=4)
    p.map(multi_work,users_urls)
    time.sleep(2)
    p.terminate()
    p.close()
    p.join()
    # os.system("taskkill /im chromedriver.exe /f")
    # os.system("taskkill /im chrome.exe /f")
    # os.system("taskkill /pid chromedriver.exe /f")
    # os.system("taskkill /pid chrome.exe /f")



if __name__ == '__main__':
   main()

Если есть вариант как лучше поступить, подскажите, возможно я пытаюсь сделать то, что не возможно

def multi_work(url):
    driver_head.get(url=url) 
    id = re.search('/(\d+)-', driver_head.current_url).group(1)
    driver_head.get(f"https://example.com/api/v2/users/{id}?localize=false")

Ответы (2 шт):

Автор решения: Roman-Stop RU aggression in UA

Если вы хотите закрывать браузер после каждой итерации, то это автоматически означает, что в начале итерации вам нужно его открывать, т.е. заново драйвер создавать. Вы, судя по всему, это делаете один раз, до цикла. Потому код и падает, если добавить закрытие.

Правильно будет открыват браузер в начале multi_work и закрывать в конце:

from selenium import webdriver

def multi_work(url):
  with webdriver.Chrome() as driver:
      driver.get(url=url) 
      id = re.search('/(\d+)-', driver.current_url).group(1)
      ...

На месте webdriver.Chrome можете сделать нужную вам инициализацию, как/если вы сейчас это делаете до цикла.

→ Ссылка
Автор решения: Excellent

Первая функция. Создал отдельный драйвер в функции

def get_item():
    hhd = webdriver.Chrome(
        executable_path=r"C:\Users\...\chromedriver.exe",
        seleniumwire_options=proxy_options,
        chrome_options=chrome_options)
    with hhd as d_head:

Вторая Функция. Создал отдельный драйвер в функции

def multi_work(url):
    ddh = webdriver.Chrome(
        executable_path=r"C:\Users\...\chromedriver.exe",
        seleniumwire_options=proxy_options,
        chrome_options=chrome_options)
    with ddh as driver_h:

Мейн. Просто подставил киллер процессов(taskkill) между первой и последующими функциями. Таким образом где-то между процессами завершаются процессы chrome и chromedriver, при этом цикл всей функции def main(): не обрывается.

def main():        
      while True:
        get_item()
        time.sleep(1)
        os.system("taskkill /im chromedriver.exe /f")
        time.sleep(1)
        os.system('taskkill /im chrome.exe /f')
        time.sleep(1)
        get_url_json()
        get_url_post()
        p = Pool(processes=4)
        p.map(multi_work, users_urls)

        time.sleep(100)
→ Ссылка