基于java的鼠标键盘模拟操作常用方法汇总

最近在研究基于模拟器的,根据手机号微信自动添加好友的工具,其中涉及到了鼠标模拟点击、字符串输入等方法。同时,针对采集中可能需要截取验证码图片,整理了截图的功能。

具体代码如下所示:

package org.crawler;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;

public class Test {
	private static Robot robot;
	static {
		try {
			robot = new Robot();
			// 执行完一个事件后,再执行下一个
			robot.setAutoWaitForIdle(true);
		} catch (AWTException e) {
			e.printStackTrace();
		}
	}

	/***
	 * @date 2020年4月8日 下午11:52:22
	 *
	 * @Title: inputStr
	 *
	 * @Description: 输入字符串;
	 *
	 * @param str 带输入的字符串
	 *
	 * 
	 * @throws
	 */
	public static void inputStr(String str) {// 字符串
		robot.delay(1000);// 等待1秒
		Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		clipboard.setContents(new StringSelection(str), null);
		robot.keyPress(KeyEvent.VK_CONTROL);
		robot.keyPress(KeyEvent.VK_V);
		robot.keyRelease(KeyEvent.VK_V);
		robot.keyRelease(KeyEvent.VK_CONTROL);
		System.out.println("输入字符串【" + str + "】完毕");
	}

	/***
	 * 鼠标移动到某个坐标点;
	 */
	public static void moveTo(int x, int y) {
		robot.delay(1000);// 等待1秒
		// 将鼠标指针移动到指定屏幕坐标
		robot.mouseMove(x, y);
		System.out.println("鼠标移动到【" + x + "," + y + "】坐标点完毕");
	}

	/***
	 * 
	 * 按下/释放一个或多个鼠标按钮, 参数说明:
	 * 
	 * buttons: 鼠标按钮掩码, 一个或多个以下标志的组合:
	 * 
	 * InputEvent.BUTTON1_MASK 鼠标左键
	 * 
	 * InputEvent.BUTTON2_MASK 鼠标中键
	 * 
	 * InputEvent.BUTTON3_MASK 鼠标右键
	 *
	 * @date 2020年4月9日 上午12:03:46

	 * 
	 * @throws
	 */
	public static void mousePress(int type) {
		robot.delay(1000);// 等待1秒
		if (type == 1)
			robot.mousePress(InputEvent.BUTTON1_MASK);// 鼠标左键
		if (type == 2)
			robot.mousePress(InputEvent.BUTTON2_MASK);// 鼠标中键
		if (type == 3)
			robot.mousePress(InputEvent.BUTTON3_MASK);// 鼠标右键
		System.out.println("【" + (type == 1 ? "按下鼠标左键" : type == 2 ? "按下鼠标中键" : "按下鼠标右键") + "】完毕");
	}

	/***
	 * 释放鼠标左键(按下后必须要释放, 一次点击操作包含:按下和释放)
	 * 
	 * @date 2020年4月9日 上午12:07:47
	 * 
	 * @throws
	 */
	public static void mouseRelease(int buttons) {
		robot.delay(1000);// 等待1秒
		if (buttons == 1)
			robot.mouseRelease(InputEvent.BUTTON1_MASK);// 鼠标左键
		if (buttons == 2)
			robot.mouseRelease(InputEvent.BUTTON2_MASK);// 鼠标中键
		if (buttons == 3)
			robot.mouseRelease(InputEvent.BUTTON3_MASK);// 鼠标右键
		System.out.println("【" + (buttons == 1 ? "松开鼠标左键" : buttons == 2 ? "松开鼠标中键" : "松开鼠标右键") + "】完毕");
	}

	/***
	 * 截屏;从X、Y坐标点,截取宽度为imageWidth,高为imageHeight的图像;
	 *
	 * @date 2020年4月9日 上午12:55:46
	 *
	 * @Title: snapShot
	 *
	 * @Description:截屏;
	 *
	 * @param imageFilePath 图片保存路径(全路径;);
	 * 
	 * @param X 截屏开始X轴坐标点;
	 * 
	 * @param Y 截屏开始Y轴坐标点;
	 * 
	 * @param imageWidth 从X坐标点开始的X轴长度;
	 * 
	 * @param imageHeight 从Y坐标点开始Y轴的高度;
	 *
	 * @return void 返回类型
	 * 
	 * @throws
	 */
	public static void snapShot(String imageFilePath, int X, int Y, int imageWidth, int imageHeight) {
		try { // 拷贝屏幕到一个BufferedImage对象screenshot
			BufferedImage screenshot = robot.createScreenCapture(new Rectangle(100, 100, 400, 100));
			File f = new File(imageFilePath);
			System.out.print("Save File  " + imageFilePath + ""); // 将screenshot对象写入图像文件
			ImageIO.write(screenshot, "png", f);
			System.out.print("......Finished!\n");
		} catch (Exception ex) {
			System.out.println(ex);
		}
	}
}

今天就说这么多吧,下次详细的介绍一下基于模拟器自动添加微信好友的方法。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值