roteiro do robô para o blog automaticamente escreve: combate Java
roteiro do robô para o blog automaticamente escreve: combate Java
classe Robot
classe robô é usado para automação de testes, demos de execução automática, e outra necessidade de controlar as aplicações de mouse e teclado que geram eventos de entrada do sistema nativas. O principal objetivo do robô é para facilitar automatizado testando plataforma Java.
Robot usado em uma classe Java, necessidade de pacote java.awt importação, como segue:
import java.awt.*;
classe Robot e outros exemplos do método de classes:
//类名 对象名 = new 类名();
Robot robot = new Robot();
API comum
mouse:
// 将鼠标指针移动到指定屏幕坐标
void mouseMove(int x, int y)
/**
* 按下/释放一个或多个鼠标按钮, 参数说明:
* buttons: 鼠标按钮掩码, 一个或多个以下标志的组合:
* InputEvent.BUTTON1_DOWN_MASK 鼠标左键
* InputEvent.BUTTON2_DOWN_MASK 鼠标中键
* InputEvent.BUTTON3_DOWN_MASK 鼠标右键
*/
void mousePress(int buttons)
void mouseRelease(int buttons)
// 在配有滚轮的鼠标上旋转滚轮
void mouseWheel(int wheelAmt)
teclado
/**
* 按下/释放键盘按键, 参数说明:
* keycode: 键盘键值常量, 定义在 KeyEvent.VK_XXX 中
*/
void keyPress(int keycode)
void keyRelease(int keycode)
tela
// 获取指定屏幕坐标处的像素颜色
Color getPixelColor(int x, int y)
// 截屏, 截取指定的矩形区域
BufferedImage createScreenCapture(Rectangle screenRect)
controle
// 睡眠指定的时间, 相当于 Thread.sleep(long ms)
void delay(int ms)
// 在处理完当前事件队列中的所有事件之前, 一直等待
void waitForIdle()
// 设置此 Robot 在生成一个事件后是否自动调用 waitForIdle()
// 设置为 true, 表示添加的事件逐个按顺序执行(执行完一个再执行下一个)
void setAutoWaitForIdle(boolean isOn)
boolean isAutoWaitForIdle()
// 设置此 Robot 每在生成一个事件后自动睡眠的毫秒数
void setAutoDelay(int ms)
int getAutoDelay()
dicas
- De destacar pressionando o botão e o botão é liberado, a imprensa não deve apenas escrever, esqueça o lançamento.
- Mova a localização do mouse como um parâmetro em pixels. Obter as coordenadas de um ponto na tela, você pode escrever:
robot.delay(114514);
Point point = MouseInfo.getPointerInfo().getLocation();
System.out.println(point);//在114.514秒内将你的鼠标放在你想要获得坐标的位置,别动,程序执行完毕后会在控制台输出坐标。
- Às vezes o movimento do mouse para mover a localização do tempo não é muito preciso, então você pode escrever um loop:
for (int j = 0; j < 5; j++) {//循环次数不宜过多,以免给CPU造成较大负担
writer.mouseMove(140, 100);
}
- Às vezes é o tipo de entrada analógica necessário, então a necessidade de permanecer algum tempo entre a operação do teclado (que o branco não é muito rápido digitando velocidade, o método de entrada pode não responder)
writer.keyPress(KeyEvent.VK_C);
writer.keyRelease(KeyEvent.VK_C);
writer.delay(500);//0.5秒的响应时间
writer.keyPress(KeyEvent.VK_E);
writer.keyRelease(KeyEvent.VK_E);
writer.delay(500);
writer.keyPress(KeyEvent.VK_S);
writer.keyRelease(KeyEvent.VK_S);
writer.delay(500);
writer.keyPress(KeyEvent.VK_H);
writer.keyRelease(KeyEvent.VK_H);
writer.delay(500);
writer.keyPress(KeyEvent.VK_1);
writer.keyRelease(KeyEvent.VK_1);
combate código
Em primeiro lugar no código:
package com.company;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.security.Key;
public class Main {
public static void main(String[] args) throws AWTException {
// write your code here
Robot writer = new Robot();
writer.delay(5000);//5秒钟内把IDE最小化,以免鼠标乱点
for(int i=0;i<10;i++) {
//title
for (int j = 0; j < 5; j++) {
writer.mouseMove(140, 100);
}
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(1000);
writer.keyPress(KeyEvent.VK_1);
writer.keyRelease(KeyEvent.VK_1);
writer.delay(3000);
//content
writer.mouseMove(140, 300);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.keyPress(KeyEvent.VK_CONTROL);
writer.keyPress(KeyEvent.VK_V);
writer.keyRelease(KeyEvent.VK_CONTROL);
writer.keyRelease(KeyEvent.VK_V);
writer.delay(3000);
//go to release
writer.mouseMove(1400, 100);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
//选择专栏
writer.mouseMove(650, 305);
writer.delay(500);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(1000);
writer.keyPress(KeyEvent.VK_C);
writer.keyRelease(KeyEvent.VK_C);
writer.delay(500);
writer.keyPress(KeyEvent.VK_E);
writer.keyRelease(KeyEvent.VK_E);
writer.delay(500);
writer.keyPress(KeyEvent.VK_S);
writer.keyRelease(KeyEvent.VK_S);
writer.delay(500);
writer.keyPress(KeyEvent.VK_H);
writer.keyRelease(KeyEvent.VK_H);
writer.delay(500);
writer.keyPress(KeyEvent.VK_1);
writer.keyRelease(KeyEvent.VK_1);
//select 文章类型
writer.mouseMove(730, 588);
writer.delay(2000);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(2000);
writer.mouseMove(730, 591);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(2000);
writer.mouseMove(980, 800);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(500);
//one more :-)
for (int j = 0; j < 5; j++) {
writer.mouseMove(900, 560);
}
writer.delay(1000);
writer.mousePress(InputEvent.BUTTON1_DOWN_MASK);
writer.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
writer.delay(300000);//五分钟写一篇
}
}
}
uso:
Copie pronto para escrever o conteúdo para a área de transferência -> Open Intellij IDEA> Clique run-> dentro de cinco segundos para minimizar a mudança para página de blog editar CSDN (tela cheia) -> performances script de início
Nota:
Desde variam entre o tamanho da tela e resolução, usando um script, dependendo da sua própria tela para ajustar as coordenadas do movimento do mouse.
efeito:
Ver meu blog coluna "teste", que é intitulado "1", o blog é escrito no roteiro.