You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I was trying to make like this, however numbers seems to be wrong:
def get_touch_coordinates():
touch_coordinates = []
process = subprocess.Popen(['adb', 'shell', 'getevent', '-lt'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in process.stdout:
line = line.decode('utf-8').strip()
if 'ABS_MT_POSITION_X' in line or 'ABS_MT_POSITION_Y' in line:
coords = line.split()[-1]
touch_coordinates.append(int(coords, 16))
if len(touch_coordinates) == 2:
x, y = touch_coordinates
touch_coordinates = []
return x, y
Also sending the full code, for better understanding:
from PIL import Image, ImageDraw
import datetime
import os
import pandas as pd
import threading
import adbutils
import subprocess
# Connect to Android emulator
def connect_device():
adb = adbutils.AdbClient(host="127.0.0.1", port=5037)
devices = adb.device_list()
if not devices:
raise adbutils.errors.AdbError("Can't find any android device/emulator")
return devices[0]
try:
device = connect_device()
except adbutils.errors.AdbError as e:
print(e)
print("Ensure your emulator is running and connected.")
exit(1)
# Initialize a DataFrame to store logs
df_columns = ["timestamp", "event_type", "x", "y", "button", "screenshot_path", "screen_width", "screen_height", "application_name", "trajectory"]
df = pd.DataFrame(columns=df_columns)
# Function to get touch coordinates from the emulator
def get_touch_coordinates():
touch_coordinates = []
process = subprocess.Popen(['adb', 'shell', 'getevent', '-lt'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in process.stdout:
line = line.decode('utf-8').strip()
if 'ABS_MT_POSITION_X' in line or 'ABS_MT_POSITION_Y' in line:
coords = line.split()[-1]
touch_coordinates.append(int(coords, 16))
if len(touch_coordinates) == 2:
x, y = touch_coordinates
touch_coordinates = []
return x, y
# Function to get the screen size of the emulator
def get_screen_size():
output = subprocess.check_output(['adb', 'shell', 'wm', 'size']).decode('utf-8')
dimensions = output.split()[-1]
width, height = map(int, dimensions.split('x'))
return width, height
# Function to log the event and take a screenshot from Android emulator
def log_and_screenshot(event_type, x, y, button=None):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f")
screenshot_path = os.path.join(screenshot_dir, f"screenshot_{timestamp}.png")
# Capture screenshot from Android emulator
temp_screenshot_path = "/sdcard/screenshot.png"
device.shell(['screencap', '-p', temp_screenshot_path])
device.sync.pull(temp_screenshot_path, screenshot_path)
device.shell(['rm', temp_screenshot_path])
screenshot = Image.open(screenshot_path)
draw = ImageDraw.Draw(screenshot)
cursor_size = 10
# Scale the raw touch coordinates to match the screen size
x = int(x * screen_width / 4096) # Adjust based on your device resolution and maximum coordinate range
y = int(y * screen_height / 4096)
# Draw the cursor position with a green cross
draw.line((x - cursor_size, y, x + cursor_size, y), fill="green", width=2)
draw.line((x, y - cursor_size, x, y + cursor_size), fill="green", width=2)
screenshot.save(screenshot_path, format='PNG')
# Log the event
event_data = {
"timestamp": timestamp,
"event_type": event_type,
"x": x,
"y": y,
"button": button,
"screenshot_path": screenshot_path,
"screen_width": screen_width,
"screen_height": screen_height,
"application_name": application_name,
"trajectory": ""
}
global df
df = pd.concat([df, pd.DataFrame([event_data])], ignore_index=True)
df.to_csv(log_file_csv, index=False)
with open(log_file_txt, "a") as f:
f.write(f"{timestamp} - {event_type} - ({x}, {y}) - {button} - {screenshot_path} - {screen_width}x{screen_height} - {application_name}\n")
# Function to listen for touch events and log them
def listen_for_touch_events():
while True:
coordinates = get_touch_coordinates()
if coordinates:
x, y = coordinates
log_and_screenshot("click", x, y)
# Main function to handle user choice
def main():
global application_name, screenshot_dir, log_file_csv, log_file_txt, screen_width, screen_height
application_name = input("Enter the application, which you want to record: ")
# Create a new directory for the screenshots based on the application name
screenshot_dir = application_name
os.makedirs(screenshot_dir, exist_ok=True)
# Define the log files in the new directory
log_file_csv = os.path.join(screenshot_dir, "mouse_log.csv")
log_file_txt = os.path.join(screenshot_dir, "mouse_log.txt")
# Get screen size from the Android emulator
screen_width, screen_height = get_screen_size()
print("Choose an option:")
print("1. Automatic mode")
print("2. Manual mode")
choice = input("Enter your choice (1 or 2): ")
if choice == '1':
# Start performing random actions in a separate thread
threading.Thread(target=perform_random_actions).start()
elif choice == '2':
# Start listening for touch events
threading.Thread(target=listen_for_touch_events, daemon=True).start()
print("Manual mode activated. Click in the emulator to log events.")
else:
print("Invalid choice. Exiting.")
return
# Keep the script running to listen for events
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Script terminated.")
if __name__ == "__main__":
main()
The text was updated successfully, but these errors were encountered:
Hello, how can I store coordinates of mouse?
I was trying to make like this, however numbers seems to be wrong:
Example of output:
Also sending the full code, for better understanding:
The text was updated successfully, but these errors were encountered: