There's no need to control the cursor, you can just replay the request. Open up Firebug, solve a puzzle and capture the POST data being transmitted to the server:
observation_data: {"observationNumber":3,"mouse":[{"x":1,"y":68,"down":false},{"{"observationNumber":3,"mouse":[{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":1,"y":68,"down":false},{"x":2,"y":55,"down":false},{"x":34,"y":50,"down":false},{"x":40,"y":51,"down":false},{"x":40,"y":52,"down":false},{"x":40,"y":52,"down":false},{"x":40,"y":52,"down":false},{"x":40,"y":52,"down":false},{"x":40,"y":52,"down":true},{"x":40,"y":52,"down":true},{"x":108,"y":52,"down":true},{"x":242,"y":50,"down":true},{"x":327,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true},{"x":336,"y":52,"down":true}],"clock":[16555,16597,16636,16677,16723,16755,16797,16837,16877,16917,16957,16996,17036,17075,17116,17157,17198,17236,17277,17319,17357,17396,17438,17476,17517,17557,17598,17638,17677],"bins":[[{"id":2,"time":14037}],[{"id":3,"time":16156},{"id":4,"time":17677}],[{"id":4,"time":17677}]],"items":[]}