JAVA使用HtmlUnit爬虫工具模拟登陆CSDN案例

2025-05-29 0 23

最近要弄一个爬虫程序,想着先来个简单的模拟登陆, 在权衡jxbrowserhtmlunit 两种技术, jxbowser有界面呈现效果,但是对于某些js跳转之后的效果获取比较繁琐。

随后考虑用htmlunit, 想着借用咱们csnd的登陆练练手。谁知道csdn的登陆,js加载时间超长,不设置长一点的加载时间,按钮提交根本没效果,js没生效。 具体看代码注释吧。 奉劝做爬虫的同志们,千万别用csdn登陆练手,坑死我了。

maven配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
<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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72
package com.test;

import java.io.ioexception;

import java.net.malformedurlexception;

import java.util.hashmap;

import java.util.map;

import java.util.set;

import com.gargoylesoftware.htmlunit.browserversion;

import com.gargoylesoftware.htmlunit.failinghttpstatuscodeexception;

import com.gargoylesoftware.htmlunit.nicelyresynchronizingajaxcontroller;

import com.gargoylesoftware.htmlunit.silentcsserrorhandler;

import com.gargoylesoftware.htmlunit.webclient;

import com.gargoylesoftware.htmlunit.html.htmlbuttoninput;

import com.gargoylesoftware.htmlunit.html.htmlform;

import com.gargoylesoftware.htmlunit.html.htmlpage;

import com.gargoylesoftware.htmlunit.html.htmlpasswordinput;

import com.gargoylesoftware.htmlunit.html.htmltextinput;

import com.gargoylesoftware.htmlunit.util.cookie;

public class simulatelogin

{

//访问的目标网址(csdn)

private static string target_url = "https://passport.csdn.net/account/login?from=http://www.csdn.net";

public static void main(string[] args) throws failinghttpstatuscodeexception, malformedurlexception, ioexception

{

// 模拟一个浏览器

webclient webclient = new webclient(browserversion.chrome);

// 设置webclient的相关参数

webclient.setcsserrorhandler(new silentcsserrorhandler());

//设置ajax

webclient.setajaxcontroller(new nicelyresynchronizingajaxcontroller());

//设置支持js

webclient.getoptions().setjavascriptenabled(true);

//css渲染禁止

webclient.getoptions().setcssenabled(false);

//超时时间

webclient.getoptions().settimeout(50000);

//设置js抛出异常:false

webclient.getoptions().setthrowexceptiononscripterror(false);

//允许重定向

webclient.getoptions().setredirectenabled(true);

//允许cookie

webclient.getcookiemanager().setcookiesenabled(true);

// 模拟浏览器打开一个目标网址

htmlpage page = webclient.getpage(target_url);

/**等待js加载完全,csdn这点 特别坑,js加载时间超长!!!!!!! 后人切记不要用csdn模拟登陆!!!!!!!**/

webclient.waitforbackgroundjavascript(10000*3);

// 根据form的名字获取页面表单,也可以通过索引来获取:page.getforms().get(0)

htmlform form = (htmlform) page.getelementbyid("fm1");

htmltextinput username = (htmltextinput) form.getinputbyname("username");

htmlpasswordinput password = (htmlpasswordinput) form.getinputbyname("password");

username.setvalueattribute("********"); //用户名

password.setvalueattribute("********"); //密码

htmlbuttoninput button = (htmlbuttoninput) page.getbyxpath("//input[contains(@class, 'logging')]").get(0);

// scriptresult result = page.executejavascript("javascript:document.getelementsbyclassname('logging')[0].click()");

// htmlpage retpage = (htmlpage) result.getnewpage();

htmlpage retpage = button.click();

// 等待js驱动dom完成获得还原后的网页

webclient.waitforbackgroundjavascript(1000);

//输出跳转网页的地址

system.out.println(retpage.geturl().tostring());

//输出跳转网页的内容

system.out.println(retpage.asxml());

//获取cookie

set<cookie> cookies = webclient.getcookiemanager().getcookies();

map<string, string> responsecookies = new hashmap<string, string>();

for (cookie c : cookies) {

responsecookies.put(c.getname(), c.getvalue());

system.out.print(c.getname()+":"+c.getvalue());

}

webclient.close();

system.out.println("success!");

}

}

另外,csdn的js总是莫名其妙的报一堆错,如果不想看,想忽略的话,在创建webclient前加上如下代码:

?

1

2

3

4

5

6

7

8
//设置日志级别,原页面js异常不打印

logfactory.getfactory().setattribute("org.apache.commons.logging.log", "org.apache.commons.logging.impl.nooplog");

java.util.logging.logger.getlogger("com.gargoylesoftware.htmlunit")

.setlevel(level.off);

java.util.logging.logger.getlogger("org.apache.commons.httpclient")

.setlevel(level.off);

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对快网idc的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/moneyshi/article/details/78799949

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 JAVA使用HtmlUnit爬虫工具模拟登陆CSDN案例 https://www.kuaiidc.com/110527.html

相关文章

发表评论
暂无评论