栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java通过调用鼠标模拟自动添加微信好友

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java通过调用鼠标模拟自动添加微信好友

鼠标模拟自动添加微信好友
  • 背景
  • 实现

背景

x乎上刷到的帖子
试了几次,没试出来,想着能不能暴力一点,把所有可能的微信号输出出来,然后微信自动添加好友。

实现

参考这位大佬的帖子
他是通过键盘发消息,我是通过鼠标点击。

package Api;

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;

public class AutoAdd {
    public static void main(String[] args) throws InterruptedException {
        // 要搜索的微信号、手机号等等(此处有一个bug)
        String friendNickName = "weixinhao";

        searchMyFriendAndSend(friendNickName);
    }

    
    private static void searchMyFriendAndSend(String friendNickName) throws InterruptedException {
        // 创建Robot对象
        Robot robot = getRobot();
        //打开微信 Ctrl+Alt+W
        assert robot != null;
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_W);
        //释放Ctrl按键,像Ctrl,退格键,删除键这样的功能性按键,在按下后一定要释放
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_ALT);

        // 该延迟不能少,否则无法搜索
        robot.delay(1000);

        // Ctrl + F 搜索指定好友
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_F);
        robot.keyRelease(KeyEvent.VK_CONTROL);

        // 将好友昵称发送到剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable tText = new StringSelection(friendNickName);
        clip.setContents(tText, null);
        // 以下两行按下了ctrl+v,完成粘贴功能
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.delay(1000);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.delay(2000);


        //这是当前鼠标的坐标值
        Point point = MouseInfo.getPointerInfo().getLocation();
        System.out.println(point);
        //这是你的屏幕坐标信息
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        System.out.println(screenSize);


        // 鼠标移动,瞬移到屏幕指定的(x,y)位置:此位置搜索微信号位置
        robot.mouseMove(1200,312);
        point(1200,312,robot);
        robot.delay(1000);
        Thread.sleep(1* 1000); // 休眠 1 秒
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
//        robot.delay(1000);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        robot.delay(1000);


        // 鼠标移动,瞬移到屏幕指定的(x,y)位置:此位置是搜索账号异常,然后点击确定
        robot.mouseMove(1344,596);
        point(1344,596,robot);
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        robot.delay(1000);


        // 鼠标移动,瞬移到屏幕指定的(x,y)位置:此位置是添加好友位置
        robot.mouseMove(1642,574);
        point(1642,574,robot);
        robot.delay(1000);
        Thread.sleep(1* 1000); // 休眠 1 秒
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        robot.delay(1000);

        //我是xxx
        String Im="我是李xx";
        AutoIm(Im,1479,223,robot);

        //备注xxx
        String note="想似手机号的人";
        AutoIm(note,1472,335,robot);

        // 鼠标移动,瞬移到屏幕指定的(x,y)位置:此位置是确定添加好友位置
        robot.mouseMove(1265,948);
        point(1265,948,robot);
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        robot.delay(1000);
    }

    
    private static void point(int x,int y,Robot robot) throws InterruptedException{
        robot.mouseMove(x,y);
        Point point = MouseInfo.getPointerInfo().getLocation();
        while(Math.abs(x-point.getX())>2||Math.abs(y-point.getY())>2){
            robot.mouseMove(x,y);
            point = MouseInfo.getPointerInfo().getLocation();
        }
    }

    
    private static void AutoIm(String Im,int x,int y,Robot robot) throws InterruptedException{
        point(x,y,robot);//使鼠标位置定位到对应位置上
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        //先清除自带的(最多20次)
        for(int i=0;i<20;i++){
            robot.keyPress(KeyEvent.VK_BACK_SPACE);
            robot.delay(100);
            robot.keyRelease(KeyEvent.VK_BACK_SPACE);
        }
        // 将我是xxx发送到剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable tText = new StringSelection(Im);
        clip.setContents(tText, null);
        // 以下两行按下了ctrl+v,完成粘贴功能
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.delay(1000);
        Thread.sleep(5*1000);
    }

    
    private static void AutoNote(String Im,int x,int y,Robot robot) throws InterruptedException{
        point(x,y,robot);//使鼠标位置定位到对应位置上
        // 鼠标(按下/松开)事件,buttons可以填写 MouseEvent.BUTTON1_MASK 等
        robot.mousePress(MouseEvent.BUTTON1_MASK);
        robot.mouseRelease(MouseEvent.BUTTON1_MASK);
        //先清除自带的(最多20次)
        for(int i=0;i<15;i++){
            robot.keyPress(KeyEvent.VK_BACK_SPACE);
            robot.delay(100);
            robot.keyRelease(KeyEvent.VK_BACK_SPACE);
        }
        // 将我是xxx发送到剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable tText = new StringSelection(Im);
        clip.setContents(tText, null);
        // 以下两行按下了ctrl+v,完成粘贴功能
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.delay(1000);
        Thread.sleep(5*1000);
    }

    //获取Robot
    private static Robot getRobot(){
        // 创建Robot对象
        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        return robot;
    }
}

代码应该很好理解,就是讲一下里面的获取坐标值,每个电脑应该不一样。
先给代码:这个代码就是不断获取你当前鼠标的坐标值。

    @Test()
    public void test() throws InterruptedException{
        //这个函数不断执行,获取当前鼠标坐标
        while(true){
            Point point = MouseInfo.getPointerInfo().getLocation();
            System.out.println(point);
//            System.out.println(System.currentTimeMillis());
            Thread.sleep(5 * 1000); // 休眠 3 秒
//            System.out.println(System.currentTimeMillis());
//            [x=1479,y=223] [x=1472,y=335]
        }
    }

看上图,代码核心就是模拟鼠标点击事件。
所以先让鼠标移动到图中红框的位置,再模拟点击。这时我们要先获取红框坐标(鼠标点击坐标),再模拟鼠标点击。

这是我电脑的配置信息,所以x轴最大1920,y轴是1080,坐标原点在左上角。

参考链接:
https://blog.csdn.net/qq_42761569/article/details/109121451?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165249887016781685397462%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165249887016781685397462&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-7-109121451-null-null.nonecase&utm_term=java%E5%BE%AE%E4%BF%A1%E8%87%AA%E5%8A%A8%E5%8A%A0%E5%A5%BD%E5%8F%8B&spm=1018.2226.3001.4450

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号