专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java版鼠标模拟点击操作汇总(java 模拟鼠标点击)

temp10 2024-09-05 23:25:42 java教程 15 ℃ 0 评论

最近在研究基于模拟器的,根据手机号自动添加微信好友的工具开发。由于其中需要打开模拟器、打开微信等,涉及到鼠标模拟点击、字符串输入等等使用。

同时,针对采集中可能需要截取验证码图片,整理了截图的功能。

Java版鼠标模拟点击操作汇总(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);
			}
		}
	}

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表