1

セレン(chromedriver.exe == 2.9)でcefpython(cefpython3 == 57.0)クロム組み込みフレームワークを制御しようとしています

私は最初からここまで来ました。このトピックに関するものを見つけるために、ウェブの隅々まで検索しました。誰かがこれについての知識を持っているなら、ここで彼らの知識を共有することは素晴らしいことです. 私だけでなく、この質問を検索しているすべての人がこれを役に立つと思うでしょう。

幸いなことに、この簡単なチュートリアルを見つけました 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)を使用するとwebdriverエラーが発生します:

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でchromedriverを使用する方法を示す公式のcef tutですが、このチュートリアルは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()

チュートリアルの作成者にも連絡しました。ここで進行状況を更新します。

ありがとう。

4

2 に答える 2