Управление cefpython с помощью selenium webdriver

Я пытаюсь управлять встроенной структурой хрома cefpython (cefpython3 == 57.0) с помощью селена (chromedriver.exe == 2.9)

Я зашел так далеко от начала, что обыскал каждый уголок Интернета, но ничего не нашел по этой теме. Было бы здорово, если бы кто-нибудь знал об этом, поделитесь своими знаниями здесь. Не только я, все, кто ищет этот вопрос, найдут это полезным.

К счастью, нашел этот простой учебник https://github.com/sokolnikovalexey/cef-pyhton-selenium

На шаге 2 автор сообщает установить APPLICATION_PATH на путь к приложению cef (cefclient.exe)

К сожалению, у меня нет этого файла в папке. Все, что я могу найти, это subprocess.exe "C:\Users\vaas\AppData\Local\Programs\Python\Python36\Lib\site-packages\cefpython3\subprocess.exe"

Но это не запускает cef, я получаю ошибку веб-драйвера при использовании chromedriver.exe (2.9):

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed

при использовании chromedriver.exe (‹2.9):

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

вот официальный cef tut, который показывает, как использовать chromedriver с cef, но этот учебник применим только к java. https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver.md

вот пример кода, который я использую из первого урока.

import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class PythonOrgSearch(unittest.TestCase):

#    APPLICATION_PATH = '/path/to/your/cef/app.exe'
    APPLICATION_PATH = r'C:\Users\vaas\AppData\Local\Programs\Python\Python36\Lib\site-packages\cefpython3\subprocess.exe'
    TEST_PAGE_PATH = 'http://www.google.com' #here should be path to your testing page

    def setUp(self):
        options = webdriver.ChromeOptions()
        options.binary_location = self.APPLICATION_PATH
        self.driver = webdriver.Chrome(chrome_options=options)
        self.driver.get(self.TEST_PAGE_PATH)

    def test_math_operations(self):
        driver = self.driver
        operand1 = driver.find_element_by_id('operand1')
        operand2 = driver.find_element_by_id('operand2')
        result = driver.find_element_by_id('result')
        calculateButton = driver.find_element_by_id('calculateButton')

        operand1.send_keys('2')
        operand2.send_keys('3')
        calculateButton.click()
        assert result.get_attribute('value') == '5'

    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

Я также связался с автором учебника. Здесь будет обновляться прогресс.

Спасибо.


person Vaas    schedule 10.03.2018    source источник


Ответы (2)


Вы можете получить cefclient.exe из Spotify Automated Builds, загрузив пакет «Образец приложения»:

http://opensource.spotify.com/cefbuilds/index.html

Но сначала вам нужно узнать, какую версию CEF скачать, вам нужно будет загрузить именно ту версию, которая соответствует cefpython. Вы можете узнать версию CEF в cefpython, вызвав cef.GetVersion()["cef_version"].

Если вы используете cefclient.exe, вы не используете CEF Python, а вместо этого используете CEF. Если вы хотите использовать cefpython с селеном, вы можете запустить приложение cefpython и предоставить селену удаленный порт отладки, с помощью которого селен может управлять приложением цефпитона. В cefpython есть проблема № 63 «Пример автоматизации с использованием WebDriver/ChromeDriver2», а в комментарии № 2 вы можете найти пример кода:

https://github.com/cztomczak/cefpython/issues/63

person Czarek Tomczak    schedule 10.03.2018

Я владелец репозитория "cef-python-selenium". Я проверяю свое решение сейчас, и оно не актуально. У меня та же проблема, что и у вас. Извиняюсь.

Думаю проблема в разных версиях бинарников. Вот новое решение, которое работает для меня. Но теперь я использую nodejs вместо python. На этот раз я коммит и бинарники тоже. https://github.com/sokolnikovalexey/cef-nodejs-selenium

Надеюсь это поможет

person Alexey Sokolnikov    schedule 11.03.2018