As a Windows programmer, there is no difficulty in automating
browser actions - many good solutions exist, the simplest of which is
to embed an IExplore object, preferable in a .NET application. This
makes everything very simple. On Linux however, this is not really
possible. Two methods are possible for this kind of thing. The first it
to go the greasemonkey route - that is to say, use the very advanced
extensibility offered by browsers like firefox, in order to build all
required automation into. This does not easily allow one to pass
objects from javascript/html to native, which is essential for things
like OCR on captchas. Also it is not really a CLI solution, so less
good for much hacking. The second option is to embed a browser in a C++
program like I have done. On linux at the moment the browser choice is
basically opera, firefox or webkit. Opera is closed source, so no-go.
Firefox can be embedded with a special COM-like-mechanism they have
developed, but this is not fantastically stable, and it involves
writing a lot of obscure boiler-plate c++.
The best solution by far was to use the WebKit module provided by the
Qt framework. This does mean that I have to use the Qt framework, but
in fact it turns out to be quite friendly. This allows a browser to be
integrated with a c++ application as easily as on windows - in fact,
some problems like thread-safe invocation of C++ functions from
javascript, and even reflection of c++ classes to javascript visible
objects are solved by cunning and transparent means.
So, its all props to Qt.
And why is it called RedSeven? Originally, the program was written to
allow me to access my company's SVN server from an external (or
red-side) computer - they will not allow a secure svn connection,
preferring instead to have slightly heath-robinson dongle token
temporarry password type arrangement, which is far too cumbersome to
actually use without automation. It was called redsvn. then I realised
that with little extra effort I could make the whole thing generic and
vastly useful, so I changed the name to redseven because it sounded
better.