Selenium+java实现自动打字

这个博客的起源是因为博主非常喜欢练习打字,在咱们程序员中,打字快相对于敲代码来说还是很有帮助的,我经常在 https://dazi.kukuw.com/?K5WK8 这个网站练习打字,果然,人外有人,天外有天,博主觉得自己的打字速度已经够快了,但是和网友相比,还是差那么一丝丝手速,可能是单身时间太短了;

出于对技术的研究和心理的不屈服,作为一个程序员当然有程序员的办法了,博主在这里用selenium和java实现程序自动打字,也是终于实现了自己的梦想;所以这是一个技术分享博客,大家不要乱用噢,用于个人测试还是可以的;话不多说,咱们直接上代码;

1、环境准备

        selenium的安装和准备请参考博主之前的博客进行准备:JAVA配合selenium包对浏览器进行操作_小魏快起床的博客-CSDN博客_selenium配合java使用

2、代码实现

直接丢到idea中,开用,大家选择文章的时候,最好选择英文竞赛,汉语竞赛的等待完善;

@Log
public class DaZiPoJie {

    //    指定打字网站链接
    private static String url = "https://dazi.kukuw.com/";

    //自己测试的文章打字设置时间
    private static Integer time = 1;

    //打字类型
    private static String type = "竞赛";

    public static void main(String[] args) throws InterruptedException {
        //1、获取webdriver
        WebDriver driver = WebDriverUtils.getNormalWebDriver();
        driver.get(url);

        //2、手动微信登录,需要手机扫码,所以需要debug运行,扫描成功了点击完成,然后放开断点
        driver.findElement(By.xpath("//*[@id=\"form\"]/ul[1]/li[2]/span/span")).click();
        System.out.println("手动登录成功");

        //3、创建hashmap用来装列表
        HashMap<String, Object> EnglishMap = new HashMap<>();
        //4、竞赛业务代码块
        if (type.equals("竞赛")) {
            //4.1、进入到竞赛业务
            driver.findElement(By.xpath("//*[@id=\"form\"]/ul[2]/li[2]/label[3]")).click();
            driver.findElement(By.xpath("//*[@id=\"select_b\"]")).click();
            //4.2、获取到有哪些文章 有2个ul
            List<WebElement> ul = driver.findElements(By.className("ul"));
            //4.3、循环ul,然后拿到所有的竞赛文章信息
            for (WebElement u : ul) {
                List<WebElement> aList = u.findElements(By.xpath("a"));
                for (WebElement a : aList) {
                    String id = a.getAttribute("id");
                    String spanStr = a.getText() + a.findElement(By.xpath("span")).getText();
                    EnglishMap.put(id, spanStr);
                }
            }

            //4.4、查看ul里面所有的信息
            System.out.println("竞赛项目有如下:");
            System.out.println("序号     键                 值");
            TimeUnit.MILLISECONDS.sleep(100);
            Iterator<Map.Entry<String, Object>> iterator = EnglishMap.entrySet().iterator();
            int i = 1;
            //4.5、循环将竞赛文章信息标题输出到控制台  让用户自己选择
            while (iterator.hasNext()) {
                Map.Entry<String, Object> next = iterator.next();
                System.out.print(i++ + "     ");
                System.out.print(next.getKey() + "     ");
                System.out.println(next.getValue());
            }

            //4.6、用户输入需要竞赛的键
            boolean flag = true;
            String next = null;
            while (flag) {
                System.out.println("请输入需要竞赛的键:");
                Scanner scanner = new Scanner(System.in);
                next = scanner.next();
                if (EnglishMap.get(next) != null) {
                    flag = false;
                    log.info("正在启动中~~~");
                } else {
                    log.info("输入的键在列表找不到!!!请重新输入");
                }
            }

            //4.7、点击文章标题 开始自动跑
            driver.findElement(By.xpath("//*[@id=\"" + next + "\"]")).click();
        } else {
            //更改时间
            driver.findElement(By.className("time")).sendKeys(Keys.BACK_SPACE);
            driver.findElement(By.className("time")).sendKeys("" + time);
        }

        //5、获取开始测试按钮
        driver.findElement(By.className("button")).click();

        //6、获取到页面content
        WebElement content = driver.findElement(By.id("content"));
        //7、从content里面获取到所有的id
        List<WebElement> i_list = content.findElements(By.xpath("div"));
        //8、循环
        for (WebElement element : i_list) {
            //处理i几的问题
            String id = element.getAttribute("id");

            //将字符串转换为字符数组
            char[] chars = element.findElement(By.className("text")).findElement(By.xpath("span")).getText().toCharArray();

            //循环开始模拟输入
            for (char ch : chars) {
                String str = "" + ch;
                driver.findElement(By.xpath("//*[@id=\"" + id + "\"]/input[2]")).sendKeys(str);
                try {
                    //打开这里的随机暂停时间,就可以不被系统检测
//                    Integer randomInt=new Random().nextInt(160)+20;
//                    Thread.sleep(randomInt);
                    Thread.sleep(0);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //循环完了后需要回车
            driver.findElement(By.xpath("//*[@id=\"" + id + "\"]/input[2]")).sendKeys(" ");
        }

    }

}

3、效果截图

经过代码的运行,最终实现了梦想;

 

轻松拿下第一名,博主只做技术分享,大家测试就行 , 前几天阳了,一直没更新作品,更新不易,喜欢作者的作品的铁子们多支持支持,谢谢大家!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值