I don't think there is much advantage in being declarative in this case because whenever I need to scrape stuff I have to do a lot of edge case handling and I want to be in control, but it does seem to be a recurring dream to make some sort of web query language (based on my memories of Old Dr. Dobbs issues)
The flow in the example is simple: click -> wait -> process result; but it's still there. Notice that instructions are executed in the order they are defined, that is enough to make it imperative.
yes but I think it could be made truly declarative with very little work.
take out the waits, and maybe not carry around the doc all over the place - the context of the page being processed should be figured out by the interpreter.
on edit: although the web interfaces being what they are some things need to be order dependent - like
INPUT(google, 'input[name="q"]', "ferret")
CLICK(google, 'input[name="btnK"]'), I mean you need to click the button after you fill out the input.
What is the advantage of it being declarative? At least for the example, the equivalent imperative code is about the same length.