我们需要从 C++ 应用程序执行一些相当复杂的 Web 自动化(登录到应用程序、执行一些操作、注销),但性能非常重要,因此我们正在寻找选项。
有没有办法直接从 C++ 驱动 WebKit 或其他无头引擎,而不需要在两者之间增加几层(如 selenium+webdriver+network 通信+...)?Chromedriver 也许?
如果选项 1 不可行,从 C++ 运行 WebDriver(使用真实浏览器)的最佳方式是什么?
我们需要从 C++ 应用程序执行一些相当复杂的 Web 自动化(登录到应用程序、执行一些操作、注销),但性能非常重要,因此我们正在寻找选项。
有没有办法直接从 C++ 驱动 WebKit 或其他无头引擎,而不需要在两者之间增加几层(如 selenium+webdriver+network 通信+...)?Chromedriver 也许?
如果选项 1 不可行,从 C++ 运行 WebDriver(使用真实浏览器)的最佳方式是什么?
您可以使用selenium 服务器和JsonWireProtocol。在 C++ 中,您可以实现对 selenium 服务器的 CURL 请求并使用 C++ 进行 Web 自动化。
首先使用此链接:My fork of Webdriver++。
还有一些 C++ 库可以完成这项工作。第一个是sekogan 的 Webdriver++,但最后一次提交是在 3 年前,现在看来并不是所有的东西都能正常工作。第二个是我的 Webdriver++ 的分支,我已经修复了一些错误并将这个项目作为共享库,所以你可以在任何 C++ 项目中使用它。
这是一个如何使用我的 Webdriver++ 分支的示例。
#include <webdriverxx/webdriverxx.h>
using namespace webdriverxx;
int main() {
WebDriver firefox = Start(Firefox());
firefox
.Navigate("http://google.com")
.FindElement(ByClass("class_name"))
.SendKeys("Hello, world!")
.Submit();
return 0;
}
您应该研究一下PhantomJS(一种无头 WebKit 浏览器),它带有GhostDriver,它是 PhantomJS 的 WebDriver 协议实现。
您仍然需要使用其中一种WebDriver 语言绑定,我不知道 C++ 中的任何语言绑定,但您的团队可能出于自动化目的使用其中一种可用语言。
最坏的情况是,您始终可以在 Python 中创建 WebDriver 脚本,并从您的 C++ 应用程序中调用 Python 脚本。