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 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()

我也联系了教程的作者。将在这里更新进度。

谢谢。

4

2 回答 2

0

我是回购“cef-python-selenium”的所有者。我现在检查我的解决方案,但它不是实际的。我和你有同样的问题。对不起。

我认为问题出在二进制文件的不同版本中。这是对我有用的新解决方案。但现在我使用的是 nodejs 而不是 python。这次我也提交和二进制文件。 https://github.com/sokolnikovalexey/cef-nodejs-selenium

希望这可以帮助

于 2018-03-11T09:51:55.290 回答
0

您可以通过下载“示例应用程序”包从 Spotify Automated Builds 获取 cefclient.exe:

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

但首先您需要找出要下载的 CEF 版本,您需要下载与 cefpython 匹配的确切版本。您可以在 cefpython 中通过调用找到 CEF 版本cef.GetVersion()["cef_version"]

如果您使用 cefclient.exe,那么您不是在使用 CEF Python,而是在使用 CEF。如果你想将cefpython与selenium一起使用,那么你可以运行cefpython应用程序并为selenium提供远程调试端口,selenium可以通过该端口控制cefpython应用程序。cefpython “使用 WebDriver/ChromeDriver2 的自动化示例”中有问题 #63,在评论 #2 中,您可以找到示例代码:

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

于 2018-03-10T16:42:19.893 回答