Подтвердить что ты не робот

Firefox Build не работает с Selenium

для моих исследований я сделал некоторые модификации исходного кода в firefox и сам построил. Чтобы автоматизировать тестирование, я решил использовать Selenium, но, к сожалению, мой недавно созданный Firefox, похоже, не поддерживает Selenium.

Я сделал следующее:

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

binary = FirefoxBinary("/path/to/firefox/binary")

d = webdriver.Firefox(firefox_binary=binary)

d.get("http://www.google.de")

Firefox действительно работает и реагирует (я могу ввести веб-сайт в панель поиска). Но через некоторое время python script выйдет со следующим сообщением об ошибке:

Traceback (most recent call last):
  File "firefox.py", line 7, in <module>
    d = webdriver.Firefox(firefox_binary=binary)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__
    self.binary, timeout),
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
    self.binary.launch_browser(self.profile)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 66, in launch_browser
    self._wait_until_connectable()
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 109, in _wait_until_connectable
    raise WebDriverException("Can't load the profile. Profile "
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.

Я сделал google, что сообщение об ошибке и большинство предлагаемых решений, что я должен обновить Selenium, поскольку он не поддерживает используемую версию Firefox. К сожалению, я установил новейшую версию селена (2.44.0), и я даже использовал более старую версию firefox (версия 33), чтобы исключить эту точку.

Я также убедился, что мои модификации кода не являются причиной для этого, создавая чистый, немодифицированный firefox. Selenium также не работает с этим firefox.

Если я не укажу бинарник firefox и не позволю Selenium использовать установленный Firefox, все будет хорошо. Поэтому я предполагаю, что с сборкой firefox что-то не так, что я сделал точно так, как указано в онлайн-документации (например,./mach build).

Есть ли у кого-нибудь идея, какова моя ошибка? Любая помощь очень ценится!

Некоторые сведения об установке:

  • Firefox 33
  • Selenium 2.44.0
  • Python 3.4 (также пытался 2.7, тоже не работает)
  • Firefox с помощью Ubuntu 14.04
4b9b3361

Ответ 1

Ubuntu 14.04, firefox 36.0, селен 2.44.0. Та же проблема была решена:

sudo pip install -U selenium

Selenium 2.45.0 в порядке с FF36.

: Selenium 2.53+ совместим с FF45

Вы можете получить более старые версии FF здесь

Ответ 2

Я долгое время отлаживал это и в конечном итоге отказался от попыток сделать несовместимые версии работы selenium/firefox. У меня просто нет опыта в firefox, чтобы идти дальше. Моя рекомендация заключается в том, что вы загружаете стабильные версии из https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/ и продолжаете попытки сочетания firefox/selenium, которые работают в вашей среде. Для меня это:

светлячок == 32.0.3 Селен == 2.43.0

Я имею в виду журнал изменений: http://selenium.googlecode.com/git/java/CHANGELOG, чтобы увидеть, какие версии предположительно совместимы.

В основном, происходит то, что webdriver выполняет опрос на своем порту, пока не сможет установить соединение сокета.

def _wait_until_connectable(self):
    """Blocks until the extension is connectable in the firefox."""
    count = 0
    while not utils.is_connectable(self.profile.port):
        if self.process.poll() is not None:
            # Browser has exited
            raise WebDriverException("The browser appears to have exited "
                  "before we could connect. If you specified a log_file in "
                  "the FirefoxBinary constructor, check it for details.")
        if count == 30:
            self.kill()
            raise WebDriverException("Can't load the profile. Profile "
                  "Dir: %s If you specified a log_file in the "
                  "FirefoxBinary constructor, check it for details.")
        count += 1
        time.sleep(1)
    return True

И затем, если есть ошибка сокета, продолжайте движение. Так что вы, вероятно, видите (по крайней мере, то, что я есть), это браузер, висящий на 30 секунд.

def is_connectable(port):
    """
    Tries to connect to the server at port to see if it is running.

    :Args:
     - port: The port to connect.
    """
    try:
        socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        socket_.settimeout(1)
        socket_.connect(("127.0.0.1", port))
        socket_.close()
        return True
    except socket.error:
        return False

BLEH. Хорошо, я наконец-то решил сохранить конкретную версию, которую я хочу, и переключиться на совместимую версию selenium.

bin_dir = os.path.join(const.WEBDRIVER_DIR, 'firefox', 'binary', '32.0.3', 'linux-x86_64', 'firefox')
binary = FirefoxBinary(firefox_path=bin_dir)
driver = webdriver.Firefox(firefox_binary=binary)

Я также настоятельно рекомендую добавить файл журнала в двоичный файл firefox и проверить его. Ваша проблема может быть уникальной, и любые причудливые ошибки будут записаны там:

log_dir = os.path.join(const.LOGS_DIR, 'firefox')
    try:
    os.makedirs(directory)
except OSError, e:
    if e.errno == errno.EEXIST and os.path.isdir(directory):
        pass
log_path = os.path.join(log_dir, '{}.log'.format(datetime.datetime.now().isoformat('_'))
log_file = open(log_path, 'w')
binary = FirefoxBinary(firefox_path=bin_dir, log_file=log_file)

Ответ 3

Провел час по этой же проблеме. Для Python3 помните pip3, иначе он будет только обновлять selenium на Python2, и вам останется интересно, почему он все еще не работает.

sudo pip3 install -U selenium

Ответ 4

Для Эль-Капитана зафиксировано следующее:

brew install python

затем

sudo pip install --upgrade selenium

Ответ 5

У меня была та же проблема с FF 36.0.

Я рекомендую вам обновить пакет selenium до последней версии с помощью cmd 'pip install -U selenium'.