Web automation from C++

2020-02-08 21:48发布

问题:

We need to do some fairly complex web automation from C++ application (log into application, do some actions, logout), but performance is really important so we are looking at options.

  1. Is there a way to drive WebKit or other headless engine directly from C++, without the need for few more layers in between (like selenium+webdriver+network communication+...)? Chromedriver perhaps?

  2. If option 1 is not possible, what is the most optimal way to run WebDriver (with real browser) from C++?

回答1:

You should look into PhantomJS (a headless WebKit browser), which comes with GhostDriver, which is the WebDriver protocol implementation for PhantomJS.

You will still need to use one of the WebDriver language bindings, which I'm not aware of any of the language bindings that are in C++, but perhaps one of the available languages could be used by your team for automation purposes.

Worst case, you could always create your WebDriver script in Python, and call the Python script from your C++ application.



回答2:

You can use selenium server and JsonWireProtocol. In C++ you can implement CURL requests to selenium server and do web automation with C++.

Use this link first: My fork of Webdriver++.

There are also some C++ libraries that do this work. The first is Webdriver++ By sekogan but last commit was 3 years ago, and it seems not all things works for now. The second is my fork of Webdriver++, i've fixed some bugs and make this project as shared library, so you can use it in any C++ project.

This is an example of how you can use my 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;    
}