Задать вопрос
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
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
У вас там часть с созданием переменной driver обернута в перехват исключения try:, а в finally: стоят вызовы driver, в частности driver.close()
Если сработает какое-либо исключение, то driver не будет создан, т.к. всё пойдёт по ветке except и затем finally:.
А там вызов driver, а он не создан в try из-за какой-то ошибки (исключения), и интерпретатор предупреждает, что нельзя обратиться к driver, так как он не был инициализирован до использования.

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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽