前言
进行爬虫的首先要做的事情就是模拟登陆你要爬虫的网站,最近小编模拟登陆了某云网站,接下来和大家分享一下。
叙述
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。
项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器。
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit -->
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
</dependencies>
1、定义一个WebClient客户端。就相当于定义了一个没有界面的浏览器。
2、使用WebClient客户端从指定URL获取HtmlPage。HtmlPage中包含目标URL页面中的所有信息。
3、从HtmlPage中获取我们需要的指定元素。
String loginURL = "https://www.mosoteach.cn/web/index.php?c=passport&m=index";
try {
URL urllink = new URL(loginURL);
// 模拟一个浏览器
WebClient webClient = new WebClient(BrowserVersion.CHROME);
WebRequest request = new WebRequest(urllink);
request.setAdditionalHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
webClient.getOptions().setActiveXNative(true);
webClient.setJavaScriptTimeout(30000);
// 设置webClient的相关参数
webClient.setCssErrorHandler(new SilentCssErrorHandler());
//设置ajax
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
//设置支持js
webClient.getOptions().setJavaScriptEnabled(true);
//CSS渲染禁止
webClient.getOptions().setCssEnabled(true);
//超时时间
webClient.getOptions().setTimeout(50000);
//设置js抛出异常:false
webClient.getOptions().setThrowExceptionOnScriptError(false);
//允许重定向
webClient.getOptions().setRedirectEnabled(true);
//允许cookie
webClient.getCookieManager().setCookiesEnabled(true);
// 模拟浏览器打开一个目标网址
HtmlPage page = webClient.getPage(request);
/**等待js加载完全,CSDN这点 特别坑,js加载时间超长!!!!!!! 后人切记不要用CSDN模拟登陆!!!!!!!**/
webClient.waitForBackgroundJavaScript(10000*3);
// 根据form的名字获取页面表单,也可以通过索引来获取:page.getForms().get(0)
HtmlForm form = (HtmlForm) page.getForms().get(0);
HtmlTextInput username = (HtmlTextInput) form.getInputByName("account_name");
HtmlPasswordInput password = (HtmlPasswordInput) form.getInputByName("user_password");
username.setValueAttribute("xxxx"); //用户名
password.setValueAttribute("xxxx"); //密码
HtmlButton button = (HtmlButton) page.getByXPath("//button[contains(@id, 'login-button-1')]").get(0);
HtmlPage retPage = button.click();
// 等待JS驱动dom完成获得还原后的网页
webClient.waitForBackgroundJavaScript(60000);
String webContent =retPage.asXml();
CookieManager CM = webClient.getCookieManager();
Set<Cookie> cookies = CM.getCookies()
for (Cookie c : cookies) {
System.out.print(c.getName()+":"+c.getValue());
}
webClient.close();
System.out.println("Success!");
黑色背景 |
小结
掌握学习的套路,其他的一切事情都不是事情啦。
感谢您的阅读~~
文章浏览阅读9.7k次,点赞13次,收藏85次。在 github上有一个经典的状态机r-lyehv1.0.0,该状态机使用C++开发(支持C++11),单头文件,轻量级,跨平台,支持lambda表达式,使用非常方便,大大地简化了代码,使业务逻辑更清晰,是一个不错的fsm库,值得推荐。下载链接:下载下面对源该经典状态源代码以及示例以中文注释的方式进行剖析,以及大家更好地了解其原理及使用。//每个状态机都有'init', 'quit', 'push', 'back'四个成员成员函数//init:在创建某一状态时调用 ;quit在某一状态结束时.._c++状态机fsm源码剖析
文章浏览阅读1.1w次,点赞24次,收藏110次。 WGAN-GP又称为具有梯度惩罚的WGAN,一般可以替代WGAN1.WGAN:基于推土机距离原理的GAN(1)原始GAN的问题及原因 实际训练中,GAN存在训练困难、生成器和判别器的loss无法指示训练过程、生成样本缺乏多样性等问题。这与GAN的机制有关。 GAN最终达到对抗的纳什均衡只是一个理想状态,而实际情况中得到的结果都是中间状态。大部分情况是,随着训练的次数越多判别器D的效果越好,一直可以将生成器G的输出和真实样本区分开。 这是因为生成器G是从低维向高位空间映射,其生成的样本分布_wgan-gp
文章浏览阅读499次。 金融业的数字化转型引发持续关注。数字金融、智能金融、区块链等关键词都得到了热烈讨论。数据,作为一种新型生产要素,早已成为推动国经济质量发展的重要动能。数据智能驱动金融业蝶变,“一切业务数据化,一切数据业务化”势不可挡。 我国金融数字化水平处于领先地位 随着大数据、云计算、区块链、AI、5G等基础技术迅速发展,我国的数字金融也打开了新的局面。 金融业的数字化转型过程大致分为三个阶段:最初,金融业从长尾用户切入,利用互联网优势,逐步打开市场。其后,更多新技术应用到更多金融场景之中,数据智能转型加_金融科技识别抵押物价值
文章浏览阅读50次。以下内容都是本人之前学习的一些笔记很多是摘自网上并非完全原创,特此申明。最简单的一句js:<html><body><script type="text/javascript">document.write("Hello World!");</script></body></html>..._web javascript复习
文章浏览阅读7.3k次,点赞7次,收藏57次。rk3588 rk356x rv1126/1109 mpp编译 _rk3588 与rv1109
文章浏览阅读2.1k次,点赞4次,收藏12次。第一步:登录百度图片官网,截图如下所示:注意点一:开头必须是https(如上图所示,出现锁的标志),不能是http,否则后期下载图片文件会出错第二步:输入关键字,页面加载出来之后,按F12进入开发者模式,由于百度图片ajax动态加载,点击network选项卡,重新刷新页面,查看XHR数据,截图如下所示:第三步:分析多个XHR,得出规律,每一个页面所请求的url所携带的参数只有pn,rn,..._爬虫+排版
文章浏览阅读9.5k次,点赞3次,收藏14次。1、将要打包的项目设为当前工程2、开始 —> 组态王6.55 —>工程打包工具。3、在弹出的窗口中,找到组态王安装路径Kingview文件夹中的KVPacket.Prj文件,单机选中,之后点击打开。4、而后跳出的生成路径,无所谓,自己是设定好了,如:D:\chenzhutaibuild,建议放在D盘,别问为什么,哈哈5、如果需要添加相应的读写文件等其它高级操作,则接着点击上图中的“高级”按钮6、这里暂时不需要,所以直接点击生成按钮7、..._组态王打包成exe程序
文章浏览阅读1.5w次。Python脚本在Linux后台执行加个&就行了在Windows起Python服务总有不畅查了一下,可以用start /b python xxx.py后台运行,这招虽然不影响cmd操作,但是关闭cmd窗口后服务也死了解决这个问题挺麻烦的,需要以Windows服务的方式挂起来第一步,将Python脚本打包成exe可执行文件,详见: 用python_python 可以实现window系统下 进程挂起吗
文章浏览阅读667次。今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符。虽然只是一个警告,但看着实在不爽,更重要的是,警告在某些情况下,可能正是bug的来源,并且这类bug往往非常难以定位。废话不多话,下面来解决问题。 看编译器给出的提示,是告诉我们,类型库当中的符号和系统符号有重名,同时也给出了解决方法,就是..._类型库中的标识符已经是宏;使用“rename”限定符
文章浏览阅读1.3w次,点赞14次,收藏99次。原文链接:Downsampling a PointCloud using a VoxelGrid filter点云文件下载:table_scene_lms400.pcd在本篇教程中,我们将使用体素化的方式对点云数据进行下采样。原理下采样:减少点云数据集中点云数量体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。 此外体素滤波器可以去除一定程度的噪音点及离群点。主要功能是用来进行降采样。它的原理是根据输入的点云,首先计算一个能够刚好包裹住该点云的立.._体素下采样
文章浏览阅读1.2w次,点赞30次,收藏140次。参加的是2020年的微信小程序大赛,我们的作品介绍文档仅供参考。可以去我的资源下载—>>>微信小程序大赛作品介绍文档部分展示(一共23页):参加的是2020年的微信小程序大赛,我们的作品介绍文档仅供参考。可以去我的资源下载—>>>微信小程序作品介绍文档..._竞赛作品介绍文档怎么写
文章浏览阅读1.8w次,点赞2次,收藏30次。原文链接:https://blog.csdn.net/ling_cmd/article/details/81063706def excel2m(path): data = xlrd.open_workbook(path) table = data.sheets()[0] nrows = table.nrows # 行数 ncols = table.ncols ..._python excel 将一行转换为一个三角矩阵