Am 01.07.16 um 01:12 schrieb Lawrence D’Oliveiro:
On Friday, July 1, 2016 at 10:35:42 AM UTC+12, Chris Angelico wrote:

On Fri, Jul 1, 2016 at 8:27 AM, Lawrence D’Oliveiro wrote:

GUIs, by their nature, are not designed to be automated.

Doesn't mean they can't be!

It’s more trouble than it’s worth. Different (even minor) versions of
the program will move UI elements around. Things that look and behave
like buttons might have underlying code that is not quite the same as
that for buttons. There will be subtle timing issues, where something
doesn’t quite get enabled in time for your script to click on it. You
will suffer mysterious intermittent problems, where a sequence works
one time but not another time.

I think you misunderstood the request. Yes, simulating mouse clicks with fixed coordinates etc. is prone to such failure, but there are better methods. These mouse clicks and keyboard events usually trigger a method call inside the GUI program. If there are any means to call that method directly, you are independent from the graphics itself.

These bindings then usually call some higher-level functions. Many applications export their internal structure via some general communications mechanism. On Windows, COM is such a mechanism, CORBA is another one, and on the Mac that are Apple Events. AppleScript is a Mac-specific (strange) language which allows you to send arbitrary Apple events to applications. This has nothing to do with simulating mouse clicks. A deprecated Python package is found here:

        http://appscript.sourceforge.net/py-appscript/

If you look at the first example:
        app('TextEdit').documents['ReadMe'].paragraphs[1].get()

its immediately clear that this is on a very different level than simulating Copy/Paste using the mouse to get the first paragraph. According to my Google-Fu, howver, py-appscript stopped working with some OSX update. One possibility would be to send the equivalent applescript to the "osascript" program via subprocess.

Again: GUIs are for manual operations to be performed by humans. For
automation, you need a function-based scripting API and a command
line.

Yes and no. Sometimes GUIs export an API which is just not obvious to the user, sometimes they have an internal structure which can be exploited.

        Christian


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to