micromeow
@micromeow

Почему с одним драйвером код работает, а с другим нет?

Доброго времени суток, совсем недавно начал изучать python

Посмотрев гайд по мультипроцессингу вывел такой код(строго по нему, как в гайде), он запускает несколько браузеров одновременно

import random

from selenium import webdriver
import time
from multiprocessing import Pool

options = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0")
options.add_argument("--disable-blink-features=AutomationControlled")

def get_data(url):
    try:
        driver = webdriver.Chrome(
            executable_path="chromedriver",
            options=options
        )
        driver.get(url=url)
        time.sleep(5)
    except Exception as ex:
        print(ex)
    finally:
        driver.close()
        driver.quit()


if __name__ == '__main__':
    process_count = int(input("number:  "))
    url = input("url:  ")
    urls_list = [url] * process_count
    print(urls_list)
    p = Pool(processes=process_count)
    p.map(get_data, urls_list)


но столкнулся с такой проблемой, например мне нужно запустить через driver = undetected_chromedriver.Chrome(), но стоит мне поменять эту строчку, как код выдает ошибки UnboundLocalError: local variable 'driver' referenced before assignment, daemonic processes are not allowed to have children

такой драйвер не может быть использован через такой код?

P.S в коде с undetected_chromedriver.Chrome() я сделал import undetected_chromedriver
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
У вас там часть с созданием переменной driver обернута в перехват исключения try:, а в finally: стоят вызовы driver, в частности driver.close()
Если сработает какое-либо исключение, то driver не будет создан, т.к. всё пойдёт по ветке except и затем finally:.
А там вызов driver, а он не создан в try из-за какой-то ошибки (исключения), и интерпретатор предупреждает, что нельзя обратиться к driver, так как он не был инициализирован до использования.

Что делать?
Внимательно разобраться с тем, что вы творите внутри try:
Затем внимательно разобраться с except - там перехват Exception, т.е. практически любой ошибки, а надо перехватывать конкретные классы ошибок.
Ну и не вызывайте driver, пока не убедитесь, что он точно инициализирован до использования.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы