Desktop application automation
Automate mouse, keyboard, and screen operations on cloud computers using the AgentBay SDK Computer Use module.
Overview
The Computer Use module provides UI automation for cloud computers across three categories:
-
Mouse operations - Click, move, drag, and scroll with pixel-level precision.
-
Keyboard operations - Type text and send key combinations.
-
Screen operations - Capture screenshots and retrieve screen dimensions.
Method summary
|
Category |
Method |
Description |
|
Mouse |
Click at specified coordinates. |
|
|
Mouse |
Move cursor without clicking. |
|
|
Mouse |
Drag from one point to another. |
|
|
Mouse |
Scroll the mouse wheel at a location. |
|
|
Mouse |
Get current cursor coordinates. |
|
|
Keyboard |
Type a string at the cursor position. |
|
|
Keyboard |
Send key combinations or shortcuts. |
|
|
Keyboard |
Release previously held keys. |
|
|
Screen |
Capture the screen and get a download URL. |
|
|
Screen |
Get screen dimensions and DPI scaling. |
Coordinate system
All operations use pixel coordinates with origin (0, 0) at the top-left corner. X increases rightward, Y increases downward. Use get_screen_size() to get screen dimensions and get_cursor_position() for current cursor location.
Result objects
Computer Use methods return one of two result types:
BoolResult (returned by mouse clicks, movement, scrolling, text input, and key operations):
|
Property |
Type |
Description |
|
|
|
Whether the operation completed successfully. |
|
|
|
The boolean result of the operation. |
|
|
|
Error details if the operation failed. Empty string on success. |
OperationResult (returned by screenshot, get_cursor_position, and get_screen_size):
|
Property |
Type |
Description |
|
|
|
Whether the operation completed successfully. |
|
|
varies |
Operation-specific data. For |
|
|
|
Error details if the operation failed. Empty string on success. |
Prerequisites
Ensure the following:
-
AgentBay SDK installed (
pip install wuying-agentbay-sdk) and configured with valid credentials. -
A supported cloud computer image is available (
windows_latestorlinux_latest).
Create a session
Create a session connected to a cloud computer before performing UI automation.
from agentbay import AgentBay, CreateSessionParams
agent_bay = AgentBay()
# Use windows_latest or linux_latest
session_params = CreateSessionParams(image_id="windows_latest")
session = agent_bay.create(session_params).session
Delete the session when finished to release resources:
agent_bay.delete(session)
All examples below assume an existingagent_bayinstance and activesessionas shown above. Session creation and deletion code is omitted for brevity.
Mouse operations
click_mouse
Clicks at specified screen coordinates.
Signature
session.computer.click_mouse(x, y, button=MouseButton.LEFT)
Parameters
|
Parameter |
Type |
Required |
Default |
Description |
|
|
|
Yes |
- |
Horizontal position in pixels. |
|
|
|
Yes |
- |
Vertical position in pixels. |
|
|
|
No |
|
Button to use. |
MouseButton enum values
Import: from agentbay import MouseButton
|
Value |
Description |
|
|
Standard left-click. |
|
|
Right-click (context menu). |
|
|
Middle-click (scroll wheel button). |
|
|
Double left-click. |
Returns: A BoolResult object. Check result.success to confirm the click was registered.
Example
from agentbay import MouseButton
# Left-click (default button)
result = session.computer.click_mouse(x=500, y=300)
if result.success:
print("Left-click successful")
# Output: Left-click successful
# Right-click
result = session.computer.click_mouse(x=500, y=300, button=MouseButton.RIGHT)
if result.success:
print("Right-click successful")
# Output: Right-click successful
# Middle-click
result = session.computer.click_mouse(x=500, y=300, button=MouseButton.MIDDLE)
if result.success:
print("Middle-click successful")
# Output: Middle-click successful
# Double left-click
result = session.computer.click_mouse(x=500, y=300, button=MouseButton.DOUBLE_LEFT)
if result.success:
print("Double left-click successful")
# Output: Double left-click successful
move_mouse
Moves the cursor to specified coordinates without clicking.
Signature
session.computer.move_mouse(x, y)
Parameters
|
Parameter |
Type |
Required |
Description |
|
|
|
Yes |
Horizontal position in pixels. |
|
|
|
Yes |
Vertical position in pixels. |
Returns: A BoolResult object.
Example
result = session.computer.move_mouse(x=600, y=400)
if result.success:
print("Mouse move successful")
# Output: Mouse move successful
drag_mouse
Drags from one point to another while holding the specified button.
Signature
session.computer.drag_mouse(from_x, from_y, to_x, to_y, button=MouseButton.LEFT)
Parameters
|
Parameter |
Type |
Required |
Default |
Description |
|
|
|
Yes |
- |
Starting horizontal position in pixels. |
|
|
|
Yes |
- |
Starting vertical position in pixels. |
|
|
|
Yes |
- |
Ending horizontal position in pixels. |
|
|
|
Yes |
- |
Ending vertical position in pixels. |
|
|
|
No |
|
Button to hold during the drag. |
Supported button values for drag: MouseButton.LEFT, MouseButton.RIGHT, MouseButton.MIDDLE.
MouseButton.DOUBLE_LEFT is not supported for drag operations.
Returns: A BoolResult object.
Example
from agentbay import MouseButton
result = session.computer.drag_mouse(
from_x=100,
from_y=100,
to_x=200,
to_y=200,
button=MouseButton.LEFT
)
if result.success:
print("Drag operation successful")
# Output: Drag operation successful
scroll
Scrolls the mouse wheel at a specified screen location.
Signature
session.computer.scroll(x, y, direction=ScrollDirection.UP, amount=1)
Parameters
|
Parameter |
Type |
Required |
Default |
Description |
|
|
|
Yes |
- |
X position for the scroll, in pixels. |
|
|
|
Yes |
- |
Y position for the scroll, in pixels. |
|
|
|
No |
|
The direction to scroll. |
|
|
|
No |
|
Number of scroll increments. |
ScrollDirection enum values
Import: from agentbay import ScrollDirection
|
Value |
Description |
|
|
Scroll upward. |
|
|
Scroll downward. |
|
|
Scroll left. |
|
|
Scroll right. |
Returns: A BoolResult object.
Example
from agentbay import ScrollDirection
# Scroll up
result = session.computer.scroll(x=500, y=500, direction=ScrollDirection.UP, amount=3)
if result.success:
print("Scroll up successful")
# Output: Scroll up successful
# Scroll down
result = session.computer.scroll(x=500, y=500, direction=ScrollDirection.DOWN, amount=5)
if result.success:
print("Scroll down successful")
# Output: Scroll down successful
get_cursor_position
Returns the current cursor position.
Signature
session.computer.get_cursor_position()
Parameters: None.
Returns: An OperationResult object. When result.success is True, result.data contains a JSON string with x and y fields.
Example
import json
result = session.computer.get_cursor_position()
if result.success:
cursor_data = json.loads(result.data)
print(f"Cursor position: x={cursor_data['x']}, y={cursor_data['y']}")
# Output: Cursor position: x=512, y=384
Keyboard operations
input_text
Types text at the current cursor position.
Signature
session.computer.input_text(text)
Parameters
|
Parameter |
Type |
Required |
Description |
|
|
|
Yes |
The text to type. |
Returns: A BoolResult object.
Example
result = session.computer.input_text("Hello AgentBay!")
if result.success:
print("Text input successful")
# Output: Text input successful
press_keys
Sends one or more keys simultaneously, including modifier keys. Use for shortcuts like Ctrl+C or Alt+Tab.
Signature
session.computer.press_keys(keys, hold=False)
Parameters
|
Parameter |
Type |
Required |
Default |
Description |
|
|
|
Yes |
- |
A list of key names to press simultaneously. |
|
|
|
No |
|
When set to |
Returns: A BoolResult object.
Example
# Press Ctrl+A to select all
result = session.computer.press_keys(keys=["Ctrl", "a"])
if result.success:
print("Key press successful")
# Output: Key press successful
# Press Ctrl+C to copy
result = session.computer.press_keys(keys=["Ctrl", "c"])
if result.success:
print("Copy command sent")
# Output: Copy command sent
release_keys
Releases keys previously held with press_keys(hold=True). Always release held keys to prevent interference with subsequent operations.
Signature
session.computer.release_keys(keys)
Parameters
|
Parameter |
Type |
Required |
Description |
|
|
|
Yes |
A list of key names to release. |
Returns: A BoolResult object.
Example
# Hold down the Ctrl key
session.computer.press_keys(keys=["Ctrl"], hold=True)
# ... Perform other operations ...
# Release the Ctrl key
result = session.computer.release_keys(keys=["Ctrl"])
if result.success:
print("Key release successful")
# Output: Key release successful
Screen operations
screenshot
Captures the screen and returns a download URL. The image is saved to Object Storage Service (OSS).
Signature
session.computer.screenshot()
Parameters: None.
Returns: An OperationResult object. When result.success is True, result.data contains the download URL for the screenshot image (not the raw image data).
Example
result = session.computer.screenshot()
if result.success:
screenshot_url = result.data
print(f"Screenshot URL: {screenshot_url}")
# Output: Screenshot URL: https://***.***.aliyuncs.com/***/screenshot_1234567890.png?***
get_screen_size
Returns screen dimensions and the display scale factor of the cloud computer.
Signature
session.computer.get_screen_size()
Parameters: None.
Returns: An OperationResult object. When result.success is True, result.data contains a JSON string with the following fields:
|
Field |
Type |
Description |
|
|
|
Screen width in pixels. |
|
|
|
Screen height in pixels. |
|
|
|
The display scale factor (DPI scaling). A value of |
Example
import json
result = session.computer.get_screen_size()
if result.success:
screen_data = json.loads(result.data)
print(f"Screen width: {screen_data['width']}")
print(f"Screen height: {screen_data['height']}")
print(f"DPI scaling factor: {screen_data['dpiScalingFactor']}")
# Output: Screen width: 1024
# Output: Screen height: 768
# Output: DPI scaling factor: 1.0
Troubleshooting
"Tool not found" error
Symptom: A "Tool not found" error occurs when calling a Computer Use method.
Cause: The session is not running on a supported cloud computer image.
Solution: Set image_id to a supported value (windows_latest or linux_latest) when creating a session.
# Correct - use a supported image ID
session_params = CreateSessionParams(image_id="windows_latest")
Screenshot returns a URL, not image data
Symptom: result.data from screenshot() contains a URL string instead of raw image bytes.
Cause: Expected behavior. The screenshot() method stores images in OSS and returns a download URL.
Solution: Download the image from the returned URL using an HTTP client or browser.
Held keys not released
Symptom: Subsequent keyboard operations behave unexpectedly after using press_keys(hold=True).
Cause: Keys held with press_keys(hold=True) remain active until explicitly released.
Solution: Pair every press_keys(hold=True) call with a corresponding release_keys() call.
# Hold a key
session.computer.press_keys(keys=["Shift"], hold=True)
# Perform operations that need Shift held...
# Always release afterward
session.computer.release_keys(keys=["Shift"])
Coordinates out of bounds
Symptom: A mouse operation produces unexpected results or no visible effect.
Cause: Target coordinates may exceed screen bounds. The SDK does not validate coordinates client-side — they are sent directly to the cloud computer.
Solution: Call get_screen_size() to determine valid bounds, then ensure x and y stay within (0, 0) to (width, height).