python selenium firefox - add_extension не работает - PullRequest
0 голосов
/ 19 декабря 2018

Попытка добавить uBlock в сеанс браузера, но он не работает.

import selenium
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options as options


def establish_browser(type, hide):
    browser = ''
    if type == 'firefox':
        ops = options()
        ops.add_argument("--headless") if hide is True else ops.add_argument("--head")
        profile = selenium.webdriver.FirefoxProfile()
        profile.add_extension(extension='uBlock0@raymondhill.net.xpi')
        browser = selenium.webdriver.Firefox(firefox_profile=profile, executable_path='geckodriver.exe', options=ops, firefox_binary=FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe'))
    return browser

browser = establish_browser('firefox', False)

Как это изменить, чтобы uBlock работал?

ОБНОВЛЕНИЕ

Кажется, что работает версия Chrome…

if type == 'chrome':
    from selenium.webdriver.chrome.options import Options as options
    ops = options()
    ops.add_argument("--headless") if hide is True else ops.add_argument("--head")
    ops.add_extension("ublock.crx")
    browser = selenium.webdriver.Chrome(executable_path='chromedriver.exe', options=ops, desired_capabilities={'binary_location': 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'})

не рекомендуется ли использовать Firefox?

1 Ответ

0 голосов
/ 20 декабря 2018

Поскольку по какой-то причине add_extension в chrome работает, но add_extension в Firefox не работает (в настоящее время)… вот мой обходной путь для добавления расширений в Firefox.

  1. создайте новый профиль Firefoxчерез right click windows start button > run > firefox.exe -P
  2. Затем добавьте все нужные вам расширения, ublock, adblock plus и т. д.
  3. позвоните в папку своего профиля с помощью

profile = selenium.webdriver.FirefoxProfile("C:/test")

browser = selenium.webdriver.Firefox(firefox_profile=profile, options=ops)

Очевидно, profile.add_extension() не является обязательным для этого обходного пути

ОБНОВЛЕНИЕ!- добавлен профиль Chrome

В целях симметрии я обновил пример кода Chrome, чтобы использовать профиль Chrome вместо прямого вызова .crx.

  1. Установка расширений на Chromeпрофиль по умолчанию.
  2. перейдите к C:\Users\User\AppData\Local\Google\Chrome или где-нибудь еще находится папка chromes User Data.Назовите эту папку напрямую (абсолютный путь) или переименуйте ее и назовите относительный путь.Я переименовал его в chrome_profile:

    ops = options()
    ops.add_argument("--headless") if hide is True else ops.add_argument("--head")
    ops.add_argument('user-data-dir=chrome_profile')
    ops.add_argument('--profile-directory=Default')
    ops.add_argument("--incognito")
    browser = selenium.webdriver.Chrome(executable_path='chromedriver.exe', options=ops, desired_capabilities={'binary_location': 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'})
    
...