Java 爬虫之识别图片验证码后登录

Java爬虫入门简介(四)——抓包工具的使用以及使用HttpClient模拟用户登录的访问 原文地址:http://www.datalearner.com/blog/1051509365677137网络爬虫需要解决的一个重要的问题就是要针对某些需要用户名和密码访问的页面可以模拟用户自动登录。在这一篇博客中我们将介绍如何使用Chrome浏览器自带的抓包工具分析页面并模拟用户自动登录。我们会以优快云的用户登录为例,讲述如何使用抓包工具获取登录方式并使用HttpClient工具模拟登陆访问。在 阅读详情

这几年Python爬虫特别的火,我有个朋友是一个Python爬虫工程师,本人菜鸡Java开发工程师一名,最近所做的一个项目是需要去爬一个网页的数据,但是进入网页需要登录,登录需要输入图片验证码。爬虫的第三方jar包用的是jsoup,图片识别用的是tesj4j。话不多硕,上demo,奥利给!

一、下载jsoup.jar、tess4j的jar包,或者maven引入jsoup和tess4j的jar包。在windows环境下,但是tess4j本地开发需要调用dll文件还是需要的的,下载地址:点我。如下图一,是tess4j下载解压的完整目录,dist放的是tess4j的jar包,如果你用的是maven,就直接导入这个tess4j版本的jar,lib放的是windows执行的dll文件和开发中需要用的、依赖的jar包,tessdata是字库,我这里是纯识别数字,所以没有引入中文字库。我用的是maven,所以就只需要lib和tessdata这个两个文件夹。

二、获取验证码图片,识别图片中的验证码,设置用户名、密码,保持会话进行登录。

     /**
     * 
     * @param url 系统地址
     * @param user 用户名
     * @param pwd 密码
     * @param tess4jpath tess4j的地址 如G:\test\Tess4J-3.4.8-src\Tess4J
     * @return
     */
    public Map login(String url, String user, String pwd,String tess4jpath) {
        Map<String,String> map = null;
        Connection.Response LoginResponse = null;
        try {
            LoginResponse = Jsoup.connect(url).method(Connection.Method.GET).execute();
            map = LoginResponse.cookies();//获取会话,登录后需要保持会话
            Document document = LoginResponse.parse();
            Element element = document.getElementById("验证码图片标签");
            String codeimgurl = url+element.attr("src");
            String codeimgpath = tess4jpath+"\\codeimg";
            //下载验证码图片
            byte[] codeimgdata = Jsoup.connect(codeimgurl).ignoreContentType(true).execute().bodyAsBytes();
            FileUtils.saveImg(codeimgdata, codeimgpath, "codeimg.jpg");
            //识别样本输出地址
            String ocrResult = codeimgpath+"\\codetmpimgtmp.jpg";
            String OriginalImg = codeimgpath+"\\codeimg.jpg";
            //去噪点
            FileUtils.removeBackground(OriginalImg, ocrResult);
            ITesseract instance =new Tesseract();
            instance.setDatapath(tess4jpath);
            File imgDir =new File(ocrResult);
            String code = instance.doOCR(imgDir);//识别验证码
            System.out.println("code:"+code); 
            Map datas = new HashMap();
            datas.put("user", user);
            datas.put("pwd", pwd);
            datas.put("ident",code);
            Connection connection = Jsoup.connect(url+"/login?op=userLogin");
            //输入用户名和密码保持会话登录
            Connection.Response response1 = connection.data(datas).cookies(map).method(Connection.Method.POST).execute();
        } catch (IOException e) {
            map = null;
            e.printStackTrace();
        } catch (TesseractException e) {
            map = null;
            e.printStackTrace();
        }finally {
            return map;
        }
    }

上述代码中使用的工具类

public class FileUtils {
    /**
     * 级联创建目录
     * @param path
     */
    public static void creatDir(String path) {
        File file = new File(path);
        if(!file.exists()) {
            file.mkdirs();
        }
    }
    /**
     * 验证码图片处理
     * @param imgUrl
     * @param resUrl
     */
    public static void removeBackground(String imgUrl, String resUrl){
        //定义一个临界阈值
        int threshold = 300;
        try{
            BufferedImage img = ImageIO.read(new File(imgUrl));
            int width = img.getWidth();
            int height = img.getHeight();
            for(int i = 1;i < width;i++){
                for (int x = 0; x < width; x++){
                    for (int y = 0; y < height; y++){
                        Color color = new Color(img.getRGB(x, y));
                        //System.out.println("red:"+color.getRed()+" | green:"+color.getGreen()+" | blue:"+color.getBlue());
                        int num = color.getRed()+color.getGreen()+color.getBlue();
                        if(num >= threshold){
                            img.setRGB(x, y, Color.WHITE.getRGB());
                        }
                    }
                }
            }
            for(int i = 1;i<width;i++){
                Color color1 = new Color(img.getRGB(i, 1));
                int num1 = color1.getRed()+color1.getGreen()+color1.getBlue();
                for (int x = 0; x < width; x++)
                {
                    for (int y = 0; y < height; y++)
                    {
                        Color color = new Color(img.getRGB(x, y));

                        int num = color.getRed()+color.getGreen()+color.getBlue();
                        if(num==num1){
                            img.setRGB(x, y, Color.BLACK.getRGB());
                        }else{
                            img.setRGB(x, y, Color.WHITE.getRGB());
                        }
                    }
                }
            }
            File file = new File(resUrl);
            if (!file.exists())
            {
                File dir = file.getParentFile();
                if (!dir.exists())
                {
                    dir.mkdirs();
                }
                try
                {
                    file.createNewFile();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            ImageIO.write(img, "jpg", file);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 保存文件
     * @param imgdata
     * @param filePath
     * @param filename
     */
    public static void saveImg(byte[] imgdata,String filePath,String filename) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        File dir = new File(filePath);
        try {
            if(!dir.exists()&&dir.isDirectory()) {
                dir.mkdirs();
            }
            file = new File(filePath+File.separator+filename);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(imgdata);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(bos!=null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

注意:并不是所有的系统的验证码都能识别,就拿这个12306来说,我也不知道怎么识别,关键是我也不敢问啊!我识别的验证码是简单的数字验证码,原始验证码  ,去噪的验证码    ,去噪后的验证码便于识别数字。

不管怎么样,希望你使用的Java爬虫要用在正途上,毕竟最近也听说了有爬虫工程师被抓判刑的消息,所谓细水长流,我们要走可持续发展的道路。

【愚公系列】《Python网络爬虫从入门到精通》047-验证码识别(第三方验证码识别) 在爬虫开发中,验证码是我们需要面对的一个挑战,尤其是当我们遇到更加复杂的验证码时,如何识别它们成为了一个难题。本篇文章,我们将讨论如何使用第三方验证码识别服务来突破这一障碍。相比传统的图像处理与OCR技术,第三方验证码识别服务提供了更为高效和精准的解决方案。通过调用这些服务,我们可以大大简化验证码识别的流程,提升爬虫的自动化程度。第三方验证码识别服务概述:了解市面上常见的第三方验证码识别服务及其优势。如何使用Python调用第三方验证码识别API:讲解如何接入这些服务,并进行验证码的自动识别。 阅读详情

相关推荐

Java爬虫(三)-- httpClient 模拟登录 + cookie 登录状态管理

前言 前面两章内容阐述了httpClient怎么模拟Http请求和如何解析页面。 接下去会讲在一些实战中遇到的问题。 现在回到我的开发摸索之路,之前说到我所爬取的网页是某个险企提供给合作公司的一个页面,通过账号登录然后爬取指定的数据。 这里就出现本章要写的主题了。模拟登录。 我首先确认登录验证的请求所需要携带的参数: 可以看到,登录需要验证码,并且密码不是明文传输的,而是通过前...

Richard Program Studio 1万+

#Java实现二维码登录

二维码登录的流程: 1)用户选择二维码登录; 前端发送获取二维码请求,服务器收到请求后生成一个uuid(用于绑定二维码),然后根据指定网址和uuid生成对应的二维码,将uuid作为key,一个对应的code(生成二维码成功)作为value存入Redis,再将生成二维码流返回给前端展示。前端成功获取二维码后开始两秒一次轮询后端接口,直到登录成功或二维码超时(当然也包括关闭页面) 这里使用的是Redis集群模板: @Resource private RedisClusterTemplate jedis;

weixin_43962314的博客 3697

模拟登录的Java爬虫实现.zip

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

java模拟爬虫登录业务系统带传统验证码

1、使用的是tess4j识别验证码; 2、使用jsoup模拟浏览器登录请求。 package com.test.tess; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.SerializableString; import com.jst.tess.constants.Constants; import com.jst.tess.util.FileUtils; import net.sourcefo

star950117的博客 1180

四、Burpsuite工具之proxy模块详解-intercept功能

过了一个年,感觉好久都没有更新了,今天就从burpsuite的更新开始吧。前面已经说过了burpsuite的安装和proxy代理的配置,今天说一下proxy模块中非常有用的intercept功能。intercept是拦截的意思,在这里相当于拦截请求,可以实时的对请求进行拦截,然后请求参数的篡改,再把请求放通,从而达到实时修改请求的功能intercept的总体界面如下图所示其中下图红框中是可以修改请求目标的相关信息。

SmileAssassn的博客 1663

Protege新手必看:从安装到建模的完整指南(附推理功能详解)

本文为Protege新手提供从安装、配置到核心建模的完整实战指南。详细讲解了Java环境准备、本体项目创建、类与属性定义、个体填充等关键步骤,并重点解析了推理功能的配置与使用,帮助读者快速构建可逻辑推理的知识图谱,避开常见陷阱。

numpy6sculptor的博客 797

爬虫java_Java 爬虫遇到需要登录的网站,该怎么办?

这是 Java 网络爬虫系列博文的第二篇,在上一篇Java 网络爬虫,就是这么的简单中,我们简单的学习了一下如何利用 Java 进行网络爬虫。在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录的网站,我们该怎么办?在做爬虫时,遇到需要登陆的问题也比较常见,比如写脚本抢票之类的,但凡需要个人信息的都需要登陆,对于这类问题主要有两种解决方式:一种方式是手动设置 cookie ,就是先在网站上面登录...

weixin_39652136的博客 349

python blp模型 估计_随机系数Logit模型及Stata实现

欢迎投稿(荐稿)计量经济圈,计量相关都行邮箱:econometrics666@sina.cn作者:北京交通大学经济管理学院博士生,王琦珀。欢迎你加入计量经济圈社群,一起探讨前沿计量理论和实证方法。一、随机系数Logit模型1.背景实证产业组织(Empirical Industrial Organization,EIO)是目前产业组织理论的前沿,其中又以Ariel Pakes为带头人,其近期工作论文...

weixin_42298927的博客 2642

爬虫中遇到登录验证码,java 如何识别图片验证码

https://blog.youkuaiyun.com/persistencegoing/article/details/84376427 import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.I...

persistence勿忘初心 4313

微带线,带状线和接地共面波导的区别

微带线,带状线和接地共面波导的区别

sky_ying的博客 3万+

Python实现安居客新房数据抓取简易版

本文介绍使用Python爬取安居客新房楼盘数据的方法,重点针对三四线城市。通过分析移动端H5页面结构,采用滚动加载方式获取推荐楼盘列表(class="recomm-list"),从中提取楼盘ID并拼接详情页链接。代码展示了如何解析HTML标签获取楼盘名称、状态、价格、户型等基本信息,并处理图片URL。爬取过程涉及一个一级页面和两个二级页面,同时提到可能遇到的验证码问题将在后续处理。核心代码使用BeautifulSoup解析HTML,requests发送请求,并将数据存入MySQL数据库。

qq_37604998的博客 476

Java豆瓣电影爬虫——模拟登录的前世今生与验证码的爱恨情仇

前言 并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志! 从《为了媳妇的一张号,我与百度医生杠上了》里就有网友提出可以通过获取cookie的方式来登录,不需要借助selenium这样的模拟浏览器操作了,到后来在公众号里一号友说豆瓣如何实现登录,以及近期园友都有提到想获取更多的网站数据是需要登录的……登录,一直是...

baixieyun4655的博客 416

8、干式变压器

干式变压器的发展,是人类不断挑战材料科学和热物理极限的过程,每一次技术突破,都是在。温度升高,ε_r反而下降(因为分子活动性增强,极化响应变慢)。:固体导热的热阻比液体对流大一个数量级,这是无法逾越的物理规律。Nomex在高温下不是逐渐分解,而是保持性能直到一个临界点。如果 T_a = 40°C,则 T_c = 146.7°C。干式变压器(固体介质分隔):热场、电场、流场(空气)形成三维氢键网络,即使在高温下也能保持机械强度。:不是在现有技术上修修补补,而是寻找新的。仍在H级绝缘允许范围内(≤180°C)

renpeng2692873032的博客 230

httpClient 带验证码登录实现

在实现之前,需要注意一个问题。关于Cookie,如果能很好跟踪上到Cookie,基本上,实现都是小事一碟。  在网络上,有提到过验证码老是提示有错。貌似思路流程都是正确的。兄弟,如果你在半个小时还没搞清楚,先休息一下,听听歌,打打游戏。再想过。  推断为什么会出现这种问题。问题是你登录验证码页面(jsp,aspx),实际上就是一个会话或者Cookie记录。此时,你有去连接登录页面,有可能已经重

ilvest的博客 1062

【GameFramework框架内置模块】9、有限状态机(FSM)

这篇文章分享FSM有限状态机,了解过StarForce源码的同学相比都比较了解,GameFramework框架给我们抽象了一个Procedure流程的概念。这个Procedure流程可以方便的处理我们游戏从启动到游戏的各个流程阶段的处理逻辑,实现的核心就是FSM状态机,内部的Procedure流程就是不同的FsmState状态。接下来,就是FSM有限状态机的教程了。有限状态机(Finite-state machine,FSM)

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2535

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java 模拟登录含验证码

其实一直有个hacker的心,尼玛没有hacker的命啊! 心血来潮想试试用java 如何模拟登录,在网上找了很久的资料,自己大体实现了这个功能。 第一步:获取网站登录的验证码,同时要或许cookie中的JSESSIONID 第二步:识别验证码 第三步:post 提交用户名,密码,验证码,cookie 就能实现登录了。 下面一个一个解释: 首先http是无状态的,服务器要识别用

人总要坚持点什么 9235

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java爬虫selenium + jsoup(Mac 和window都兼容)

1.本例子是直接爬取 百度图片第一页图片下载下来。 废话不说,直接上demo地址 https://github.com/feifeiwuxian/java_pachong.git 有个注意的,如果要打成jar包。 打完包的时候要把lib拷贝一份放在同级目录,再运行jar ------------------ 下面给一些扩展的资料吧,比如验证码识别之类的: java版selenium使用chromedriver抓取动态网页(mac) https://blog.youkuaiyun.com/hech..

feifeiwuxian的专栏 642

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

selenium+百度OCR完成登录验证码文字识别并且完成模拟登录操作并获取cookie

前言 本文利用selenium、百度OCR在线图像识别完成某一网站的模拟登陆操作,通过OCR识别验证码完成登陆后返回cookie,常用于Java爬虫。 准备工作 在百度智能云官网创建OCR图像识别项目,获取项目的API Key以及Secret Key 下载百度OCR需要用到的工具类 下载chromedriver.exe驱动 OCR项目创建 注册登录百度智能云账号,网址:https://login.bce.baidu.com/ 选择文字识别功能并且完成应用创建 应用创建完毕后点击管理应用,获取项目的A

weixin_43900244的博客 1734

java爬虫遇到网页验证码怎么办?(使用selenium模拟浏览器并用python脚本解析验证码图片)

本人是爬虫小白,在做这个爬取工具之前也只有两天学习爬虫的经历,本来是打算用HttpClient和JSoup做爬虫的,但是遇到了烦人的验证码,只能用这种方法解决。这个代码依旧有很多不足的地方需要改进,同时由于是针对我需要爬取的网站所编写的爬虫,耦合度还是很高,所以我尽量解释了我的想法,阅读者可以根据自己的需要找到有启发的地方就再好不过了。这也是我的第一篇博客,发出来是为了记录一下这两天的工作,代码和博客内容还有很多不足,欢迎大家批评指正。ps:上述代码的部分启发如下()

HwJ__z的博客 3321

爬虫模拟登录破解无原图滑动验证码

模拟登录对象:博客园 验证码类型:无原图滑动验证码 使用工具与模块:python,selenium 浏览器:Chrome 大体思路:以前的滑动验证码多为有原图的验证码,可以通过Image模块截取两张不同的图,通过对比像素得出移动的距离,无原图验证码也是基于这个原理,只是多了一步找出原图,该操作可以通过driver.execute_script()添加JS代码,改变display...

1097

从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目

前言 为了拦截大部分请求,秒杀案例前端引入了验证码。淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归。 验证码 那么到底什么是验证码呢?验证码作为一种人机识别手段,其终极目的,就是区分正常人和机器的操作。我们常见的互联网注册、登录、发帖、领优惠券、投票等等应用场景,都有被机器刷造成各类损失的风险。 目...

316

15.网络爬虫—selenium验证码破解

一·selenium验证码破解 🧾 🧾网络爬虫是一种自动化程序,用于从Web页面中提取数据。然而,有些网站为了防止爬虫程序抓取数据,会加入一些验证码,使得程序无法自动化地完成数据采集任务。为了解决这个问题,我们可以使用selenium来破解验证码。 🧾 Selenium是一个开源的自动化测试工具,它可以模拟用户在浏览器中的操作,包括点击、输入等。使用selenium可以模拟用户手动输入验证码,从而实现验证码的破解。

weixin_50804299的博客 1万+

Java实现超简单验证码识别

闲来想实现程序模拟登陆一个系统,说白了,就是写个简单的爬虫,但是无奈,遇到了数字图片验证码,在查阅了一些方案以后,遂决定自己手写代码实现验证码识别,分享一下整个过程。 图片验证码是什么 图片验证码,这个大家应该都见过。最普遍的图片验证码就是一张图片上面有4-6个歪歪扭扭的数字字母,图片还有点看不清楚,但是基本可以肉眼识别出上面的数字字母。那为什么要有这个东东呢? 其实验证码的出现...

写代码的林克 1万+

网络爬虫入门学习

突然对网络爬虫产生了一些兴趣 (鬼知道是因为什么) ,就在网络找到了些学习资料,花了半个月的时间进行了一个网络爬虫入门学习,当然这种学习要结合实践啦。 Talk is cheap, show me the code! 所以特意将半个月实践的结果按照学习的时间顺序整理好了上传到GitHub上,希望不仅自己可以回顾,也希望可以给广大爱学习的网友一点参考的价值。哦哦哦,还有一点,爬虫可以用各种语言写...

zhaohancsdn的博客 3415

JAVA爬虫初识之模拟登录

JAVA爬虫模拟登录知乎

周无缺啊的博客 2万+
上一篇: Mybatis-plus动态数据库之主、副数据库配置从数据库(主数据库或其它数据库都可以)读取
下一篇: Java实现非对称算法AES
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值