Я пытаюсь управлять встроенной структурой хрома 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()
Я также связался с автором учебника. Здесь будет обновляться прогресс.
Спасибо.