Как загрузить профиль Firefox с помощью Python Selenium?

Я пытаюсь заставить Python Selenium работать на моем компьютере с Windows. Я обновился до последних версий Firefox, Selenium, Geckodriver, но все еще получаю следующую ошибку:

Скрипт Python

from selenium import webdriver
driver = webdriver.Firefox()

Ошибка

Traceback (most recent call last):
  File "run.py", line 17605, in <module>
  File "<string>", line 21, in <module>
  File "site-packages\selenium\webdriver\firefox\webdriver.py", line 77, in __init__
  File "site-packages\selenium\webdriver\firefox\extension_connection.py", line 49, in __init__
  File "site-packages\selenium\webdriver\firefox\firefox_binary.py", line 68, in launch_browser
  File "site-packages\selenium\webdriver\firefox\firefox_binary.py", line 103, in _wait_until_connectable
WebDriverException: Message: Can't load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.

Я также попытался создать профиль firefox с помощью следующего кода:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', os.getcwd())
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/vnd.ms-excel'))
profile.set_preference('general.warnOnAboutConfig', False)

gecko_path = "path_to_geckodriver\\geckodriver.exe"
path = "path_to_firefoxs\\Mozilla Firefox\\firefox.exe"
binary = FirefoxBinary(path)
driver = webdriver.Firefox(firefox_profile=profile,executable_path=gecko_path)
  • Python 2.7
  • Firefox 60
  • Geckodriver-v0.20.1-win64.zip
  • Селен 3.12.0

person Chris    schedule 13.05.2018    source источник


Ответы (5)


Решение:

from selenium import webdriver
fp = webdriver.FirefoxProfile('/home/gabriel/.mozilla/firefox/whatever.selenium')
driver = webdriver.Firefox(fp)

Я боролся, пока не нашел эту проблему, которая теперь решена, но была полезной, потому что показывает некоторые команды .

первая версия, не работает, потому что потом я не мог подключиться к селену:

from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = Options()
options.add_argument("-profile")
options.add_argument("/home/gabriel/.mozilla/firefox/whatever.selenium")
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
driver = webdriver.Firefox(capabilities=firefox_capabilities, firefox_options=options)

Я уверен, что при этом загружается профиль «Any.selenium», потому что если я перейду к about: profiles, я смогу прочитать:

Профиль: selenium Это используемый профиль, и его нельзя удалить.

Несмотря на то, что "something.selenium" не является профилем по умолчанию в моей системе.

Примечание: по крайней мере, один из параметров профиля переопределяется селеном (или geckodriver?): «Настройки»> «Конфиденциальность и безопасность»> «Блокировать всплывающие окна» всегда отключен. Поэтому используйте about: profiles, чтобы утверждать, какой профиль вы используете.

Примечания:

  • firefox_capabilities может не понадобиться в приведенном выше коде.
  • протестировано в Firefox 60.4.0esr (64-бит), geckodriver 0.23.0 (2018-10-04), selenium 3.141.0 с Python 3.5.3
person Gabriel Devillers    schedule 06.01.2019
comment
Итак, у вас есть два блока кода, и первый должен быть решением, но он не работает, потому что вы нигде не указываете местоположение драйвера. Вы знаете .. геккодрайвер? - person Eight Rice; 10.12.2020
comment
Не обращайте внимания на второй блок кода. В моем коде строка, которая создает драйвер: driver = webdriver.Firefox(fp, options=options, executable_path="path-to-geckodriver") - person Gabriel Devillers; 10.12.2020
comment
У меня это тоже сработало. Грасиас! - person Eight Rice; 10.12.2020

Вы не обновляли настройки профиля: profile.update_preferences (). Вы должны обновить профиль после установки предпочтений. Пожалуйста, следуйте приведенному ниже коду:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', os.getcwd())
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/vnd.ms-excel'))
profile.set_preference('general.warnOnAboutConfig', False)
profile.update_preferences()
gecko_path = "path_to_geckodriver\\geckodriver.exe"
path = "path_to_firefoxs\\Mozilla Firefox\\firefox.exe"
binary = FirefoxBinary(path)
driver = webdriver.Firefox(firefox_profile=profile,executable_path=gecko_path)
person Sang9xpro    schedule 05.03.2020

В окнах я использую:

fp = webdriver.FirefoxProfile('C:/Users/x/AppData/Roaming/Mozilla/Firefox/Profiles/some-long-string')
driver = webdriver.Firefox(firefox_profile=fp)
...

1 - Чтобы найти текущий Profile Folder, введите about:support в поле URL-адреса и нажмите клавишу ВВОД.
2 - Чтобы просмотреть все профили пользователей, введите about:profiles в поле URL-адреса и нажмите клавишу ВВОД.

person Pedro Lobito    schedule 04.04.2020
comment
Это сработало для меня, однако в качестве примечания используйте корневой каталог, а не локальный. Я продолжал пытаться использовать локальный каталог, но это никогда не помогало. Как только я перешел в рут, все заработало отлично. Вы можете найти свои корневые и локальные каталоги, открыв Firefox и поместив about: profiles в свой браузер. - person Dave; 26.02.2021

Переключитесь на хромированный драйвер. Firefox, gecko и selenium сейчас плохо работают вместе. Вот что, наконец, сработало для меня.

import unittest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

class TestTemplate(unittest.TestCase):
    """Include test cases on a given url"""

    def setUp(self):
        """Start web driver"""
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument('--no-sandbox')
        self.driver = webdriver.Chrome(chrome_options=chrome_options)
        self.driver.implicitly_wait(10)

    def tearDown(self):
        """Stop web driver"""
        self.driver.quit()

    def test_case_1(self):
        """Go to python.org and print title"""
        try:
            self.driver.get('https://www.python.org/')
            title = self.driver.title
            print title
        except NoSuchElementException as ex:
            self.fail(ex.msg)

    def test_case_2(self):
        """Go to redbull.com and print title"""
        try:
            self.driver.get('https://www.redbull.com')
            title = self.driver.title
            print title
        except NoSuchElementException as ex:
            self.fail(ex.msg)

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestTemplate)
    unittest.TextTestRunner(verbosity=2).run(suite)

Я использую файл Jenkins, который загружает буфер кадра для вызова селена и скрипта Python.

Вы можете легко запустить это на своем локальном компьютере. Вы можете захотеть получить бродячую коробку с Linux.

Вот что запускает скрипт Python.

sh "(Xvfb: 99 -screen 0 1366x768x16 &) && (python ./${PYTHON_SCRIPT_FILE})"

Это вызывается из файла докера, в котором запущен этот образ Docker.

https://github.com/cloudbees/java-build-tools-dockerfile

person James Knott    schedule 14.05.2018

Загрузка настроенного профиля firefox в java:

FirefoxOptions options = new FirefoxOptions();

ProfilesIni allProfiles = new ProfilesIni();         
FirefoxProfile selenium_profile = allProfiles.getProfile("selenium_profile"); // manualy created profile in firefox profile manager
options.setProfile(selenium_profile);

options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver", "C:\\Users\\pburgr\\Desktop\\geckodriver-v0.20.0-win64\\geckodriver.exe");
driver = new FirefoxDriver(options);
driver.manage().window().maximize();
person pburgr    schedule 14.05.2018