Java+Selenium+chrome 实现定时自动登录(含验证码解析)

这篇具有很好参考价值的文章主要介绍了Java+Selenium+chrome 实现定时自动登录(含验证码解析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作为打工人,感觉对于定时自动登录这个功能还是需要会,现将方法分享出来,供大家参考。

1.下载浏览器驱动

说明:以chrome浏览器为例,其他浏览器可以自动查找自己浏览器的驱动,方法相同

进入chrome浏览器设置,左侧菜单最后一栏,找到关于chrome,点开获取浏览器版本号,进入

https://registry.npmmirror.com/binary.html?path=chromedriver/下载距离版本号最近的驱动。

最好将浏览器的自动更新关掉,不然自动升级高版本后得重新下驱动。关于如何关闭chrome浏览器的自动更新,这篇文文章有详细说明-->关闭chrome浏览器自动更新-简单好用

Java+Selenium+chrome 实现定时自动登录(含验证码解析)

2.定时任务代码

新建SpringBoot工程,新建定时任务,可以用SpringBoot自带的@Scheduled注解,也可以使用quartz实现,这里使用quartz进行实现。

/**
 * 创建Scheduler
 */
@Configuration
@EnableScheduling
public class SchedulerCustomizer implements SchedulerFactoryBeanCustomizer {
    
    @Override
    public void customize(SchedulerFactoryBean schedulerFactoryBean) {
        schedulerFactoryBean.setAutoStartup(true);
        schedulerFactoryBean.setOverwriteExistingJobs(true);
    }
}
/**
 * 创建job
 */
@Component
public class CommonJobFactory extends SpringBeanJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        //调用父类的方法
        Object jobInstance = super.createJobInstance(bundle);
        //进行注入
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}
/***
 * @description 定时任务创建
 * @author
 */
@Component
public class QuartzManage implements ApplicationRunner {

    @Autowired
    private CommonJobFactory commonJobFactory;
    @Autowired
    private Scheduler scheduler;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 启动调度器
        scheduler.setJobFactory(commonJobFactory);
        // 1、创建JobDetail实例,UpWorkTimer为业务实现的类
        JobDetail jobDetail = JobBuilder.newJob(UpWorkTimer.class)
                .withIdentity("job1", "group1").build();
        // 2、构建Trigger实例,每隔30s执行一次
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/30 * * * * ?")).build();


        //3、创建调度器Scheduler并执行
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
        System.out.println("--------scheduler start ! ------------");
    }
}

至此,定时任务创建完成

3.业务逻辑代码

/***
 * 逻辑代码
 */
@Service
public class UpWorkTimer implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        //设置chrome的安装路径,
        //webDriverLocation 为第一步下载的驱动位置例如D:\\a\\chromedriver.exe
        System.setProperty("webdriver.chrome.driver", webDriverLocation);
        //初始化浏览器实例,并打开浏览器
        ChromeDriver driver = new ChromeDriver();
        try {
            //最大化窗口
            driver.manage().window().maximize();
            Thread.sleep(500);
            //打开一个网址,为自己需要打卡的网址
            driver.get("www.baidu.com");
            Thread.sleep(500);

            //获取用户名框并输入用户名
            driver.findElement(By.id("用户名")).sendKeys(“xxx”);

            //获取密码框并输入密码
            driver.findElement(By.id("密码")).sendKeys(“xxx”);

            //这部分为获取验证码并解析,下部分讲到
            WebElement ele = driver.findElement(By.id("img"));
            String src = ele.getAttribute("src");
            YdmVerify ydmVerify = new YdmVerify();
            String s = ydmVerify.commonVerify(src, token);

            JSONObject jsonObject = JSONObject.parseObject(s);
            if (10000 == (Integer) jsonObject.get("code")) {
                Map<String, Object> jsonDate = (Map<String, Object>) jsonObject.get("data");
                System.out.println("验证码获取成功,获取结果为:" + jsonDate.get("data"));

                //获取验证码框并输入验证码
                driver.findElements(By.id("验证码")).sendKeys((String) jsonDate.get("data"));

                //获取登录按钮并点击
                driver.findElements(By.id("登录"))).click();
                Thread.sleep(500);

                //获取签到按钮并点击
                driver.findElements(By.id("签到"))).click();
                Thread.sleep(500);
            } else {
                System.out.println("验证码获取失败,获取结果为:" + jsonObject.get("msg"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           //关闭浏览器驱动
            driver.quit();
        }
    }
}

到这里业务代码写完了,其中的页面内筒根据每个人的不同自己修改。接下来讲验证码如何生成,逻辑代码中28-35行的内容。

4.验证码图片解析

验证码的生成思路为拿到验证码图片,将图片解析为 base64 的加密串,然后调用云码平台的api生成验证码。上代码

/**
 * @author 无名
 */
public class YdmVerify {

    private static final String CustomUrl = "https://www.jfbym.com/api/YmServer/customApi";
    Map headers = new HashMap<>();


    public YdmVerify() {
        headers.put("Content-Type", "application/json");
    }
    //imageContent 为图片加密后的base64密文
    //token 为云码平台提供,获取方法见代码后的说明
    public String commonVerify(String imageContent,String token) {
        // # 数英汉字类型
        // # 通用数英1-4位 10110
        // # 通用数英5-8位 10111
        // # 通用数英9~11位 10112
        // # 通用数英12位及以上 10113
        // # 通用数英1~6位plus 10103
        // # 定制-数英5位~qcs 9001
        // # 定制-纯数字4位 193
        // # 中文类型
        // # 通用中文字符1~2位 10114
        // # 通用中文字符 3~5位 10115
        // # 通用中文字符6~8位 10116
        //# 通用中文字符9位及以上 10117
        //# 定制-XX西游苦行中文字符 10107
        // # 计算类型
        //# 通用数字计算题 50100
        // # 通用中文计算题 50101
        // # 定制-计算题 cni 452
        String verify_type;
        verify_type = "10110";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("image", imageContent);
        jsonObject.put("type", verify_type);
        jsonObject.put("token", token);
        String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
        return resp;
    }

    /**
     * 获取本地图片并 base64  加密
    public static String ImageToBase64ByOnline(String imgURL) {
        //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        InputStream in = null;
        byte[] data = null;
        //读取图片字节数组
        try {
            in = new FileInputStream(imgURL);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        String s = Base64.encodeBase64String(data);
        System.out.println(s);
        return s;

    }*/

}

若可以直接获取到加密后的密文直接传入,若不是则将验证码图片 下载至本地并调用ImageToBase64ByOnline方法生成base64 密文。接下来对云码平台使用进行讲解:

5.云码平台使用

云码平台地址:https://zhuce.jfbym.com/login/ ,注册后按照步骤提示领取新人500积分,每次验证成功需要消耗2积分,用完500积分后,1元=1000积分,足够用了。

  • 注册完成领取积分后点击右上角头像进入个人中心,找到token点击复制

Java+Selenium+chrome 实现定时自动登录(含验证码解析)
Java+Selenium+chrome 实现定时自动登录(含验证码解析)

这样就获取到了token,在代码中使用。还有非常重要的一点是,云码平台使用要jdk11,jdk8用不了,还需要一些平台特有的jar包,链接如下,自行下载后导入。

链接:https://pan.baidu.com/s/13_wbywV2nYDNCGdPHCtjaA

提取码:sugj

当然,云码平台还提供了开发文档,里面有滑块验证,九宫格的等等,我们以数字验证码为例,有兴趣的可以研究其他。

Java+Selenium+chrome 实现定时自动登录(含验证码解析)

至此,定时自动登录就完成了。

说明:此文档仅用于学术交流。文章来源地址https://www.toymoban.com/news/detail-460493.html

到了这里,关于Java+Selenium+chrome 实现定时自动登录(含验证码解析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Selenium 初步使用之自动登录(包含识别验证码),超级详细

    初次开始使用Selenium,于是开始用登录作为联手项目,是一个真实的登录界面,包含验证码(验证码是难点,获取与识别),以下会讲的很详细,我怕我下次又忘记了 我采用Selenium + python + 百度云OCR,安装等教程自行百度,我就不多说了 这段代码主要是利用selenium打开网站,

    2024年02月02日
    浏览(59)
  • 【Python从入门到进阶】39、使用Selenium自动验证滑块登录

    【Python从入门到进阶】39、使用Selenium自动验证滑块登录

    接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能,首先我们来讲解如何进行滑块自动验证的操作。 我们要通过selenium来实现目前常见的滑块验证码的验证,

    2024年02月08日
    浏览(44)
  • selenium自动化登录(实战解析)

    selenium自动化登录(实战解析)

    目录 1.纯英文验证码 1.首先需要了解运行所需要的模块 2.获取我们的目标地址链接 3.进入古诗词首页面,找到验证码的标签,获取并且保存 4.调用超级鹰打码平台 5.调用超级鹰内的方法 6.输入账号密码 7.模拟登陆需要用cookie保持登陆状态 相信有很多新手小白都跟我遇到一样的

    2024年02月15日
    浏览(16)
  • 用Selenium实现滑块验证码登录

    用Selenium实现滑块验证码登录

    现在很多网站的登录,都采用了拖动图片滑块的验证码方式来进行验证登录,比如哔哩哔哩和京东等。在使用爬虫等自动化程序时,如何通过滑块验证,就成了需要解决的问题。 这里通过大名鼎鼎的ddddocr图片识别库,和模拟浏览器操作的selenium库来实现 安装浏览器driver 首先

    2024年01月22日
    浏览(11)
  • 爬虫笔记--Selenium实现有验证码网站模拟登录

    代码如下: 一点说明: 安利个巨好用的识别验证码的库 ddddocr gitHub:https://github.com/sml2h3/ddddocr 可能会在版本上遇到问题,我的报错参考这篇文档解决:https://blog.csdn.net/zhuchengchengct/article/details/124854199 我用的版本作为参考:python是3.9.13,ddddocr是1.4.2 如有问题,欢迎大家批评

    2024年02月16日
    浏览(13)
  • Selenium自动访问Firefox和Chrome并实现搜索截图

            代码如下所示:        

    2024年02月08日
    浏览(9)
  • java自动登录 selenium 自动登录并获取cookie

    java自动登录 selenium 自动登录并获取cookie

    我用的edge,谷歌我的版本太高没有对应的驱动… 下载Edge的驱动程序,直接解压就好里面只有一个.exe文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

    2024年02月08日
    浏览(11)
  • Python Selenium实现自动化测试及Chrome驱动使用!

    Python Selenium实现自动化测试及Chrome驱动使用!

    本文将介绍如何使用Python Selenium库实现自动化测试,并详细记录了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简介 Python Selenium是一个用于Web应用

    2024年03月10日
    浏览(13)
  • Python3+Selenium+Chrome实现自动填写WPS表单

    Python3+Selenium+Chrome实现自动填写WPS表单

      本文通过python3、第三方python库Selenium和谷歌浏览器Chrome,完成WPS表单的自动填写。   python3的安装:略,网上都有教程。   Selenium的安装:在命令行输入 pip3 install selenium 并回车即可完成安装,如果不成功,查找网上教程。   Chrome的安装:略,网上都有教程。   

    2024年02月01日
    浏览(14)
  • Python Selenium实现自动化测试及Chrome驱动使用

    Python Selenium实现自动化测试及Chrome驱动使用

    本文将介绍如何使用 Python   Selenium 库实现 自动化测试 ,并详细 记录 了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简介 Python Selenium是一个用于

    2024年02月03日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包