【问题标题】:Web automation from C++来自 C++ 的 Web 自动化
【发布时间】:2013-06-25 02:18:38
【问题描述】:

我们需要从 C++ 应用程序执行一些相当复杂的 Web 自动化(登录到应用程序、执行一些操作、注销),但性能非常重要,因此我们正在研究选项。

  1. 有没有一种方法可以直接从 C++ 驱动 WebKit 或其他 headless 引擎,而无需在两者之间增加几层(例如 selenium+webdriver+network 通信+...)?可能是 Chrome 驱动程序?

  2. 如果选项 1 不可行,从 C++ 运行 WebDriver(使用真实浏览器)的最佳方式是什么?

【问题讨论】:

    标签: c++ webdriver webautomation


    【解决方案1】:

    您可以使用selenium serverJsonWireProtocol。在 C++ 中,您可以实现对 selenium 服务器的 CURL 请求,并使用 C++ 进行 Web 自动化。

    首先使用此链接:My fork of Webdriver++

    还有一些 C++ 库可以完成这项工作。 第一个是Webdriver++ By sekogan,但最后一次提交是在 3 年前,现在看来并非所有事情都有效。 第二个是my fork of Webdriver++,我已经修复了一些错误并将这个项目作为共享库,所以你可以在任何C++项目中使用它。

    这是如何使用我的My fork of 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;    
    }
    

    【讨论】:

    • 您的前叉非常时尚(非常易于使用和清洁!)。 Tho,根据您的自述文件,似乎仍然需要 selenium 服务器。我刚刚尝试过,您的示例将尝试连接到 localhost:4444。似乎 selenium 服务器需要作为侦听端口 4444 的进程运行。我只是想知道是否有更轻量级的解决方案,不需要通过另一个进程传递消息,但可以使用 javascript/ajax 等浏览网站. 提前致谢!
    【解决方案2】:

    您应该查看PhantomJS(一个无头WebKit 浏览器),它附带GhostDriver,它是PhantomJS 的WebDriver 协议实现。

    您仍然需要使用 WebDriver language bindings 之一,我不知道 C++ 中的任何语言绑定,但您的团队可能会将其中一种可用语言用于自动化目的。

    最坏的情况是,您始终可以在 Python 中创建 WebDriver 脚本,然后从您的 C++ 应用程序中调用 Python 脚本。

    【讨论】:

    • @bozo 如果你真的不在乎你不是在“真正的”浏览器中运行,那么直接使用 QtWebKit 可能是一个不错的选择。意识到,尽管这不是一件小事。据我所知,WebDriver 没有任何 C++ 语言绑定,但只要你有 JSON 解析库(json-cpp 相当不错)和 HTTP 客户端库,你就可以编写自己的语言绑定订单很短。
    • 您好。如果在 C++ 中使用 WebDriver 绑定,而不是在现有的 WebDriver 绑定中使用某些脚本语言,您认为有什么值得一提的性能优势吗?我正在寻找高性能,所以想避免使用 Java。
    猜你喜欢
    • 2016-06-20
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2011-03-17
    • 2015-04-30
    相关资源
    最近更新 更多