htmlunit 抓取网页(Chrome浏览器如何模拟浏览器的登录,HtmlUnitPost的自我解剖)

优采云 发布时间: 2021-11-25 18:16

  htmlunit 抓取网页(Chrome浏览器如何模拟浏览器的登录,HtmlUnitPost的自我解剖)

  设计步骤:

  1、模拟浏览器登录,HtmlUnit是如何模拟浏览器登录的,请参考这篇文章爬虫自解剖(抓取网页HtmlUnit),因为HtmlUnit本身不支持JavaScript 好的,没有需要加载网页的CSS文件,所以在使用HtmlUnit之前,进行相关配置,禁用CSS和JavaScript,代码如下:

  

final WebClient webClient=new WebClient(BrowserVersion.CHROME);

webClient.getOptions().setCssEnabled(false);

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setActiveXNative(false);

webClient.getOptions().setAppletEnabled(false);

webClient.getOptions().setPopupBlockerEnabled(false);

webClient.getOptions().setThrowExceptionOnScriptError(false);

webClient.getOptions().setPrintContentOnFailingStatusCode(false);

  2、 以上设置后,CSS/JS 和其他一些相关插件被禁用。我们来分析一下Post请求中的相关参数,打开Chrome浏览器,点击网页登录按钮旁边的review元素。 , 可以查看附近的相关html代码,相关html代码如下(只列出比较关注的部分)

  

登录

  从上面的代码可以看出,Post请求中需要用到的相关参数是email和password,所以这两项在Post请求中是必不可少的。模拟登录过程的代码如下图所示:

  

final HtmlPage page=webClient.getPage("http://www.****.com/#signin");

List forms=page.getForms();

HtmlForm login=forms.get(0);

HtmlTextInput email=login.getInputByName("email");

HtmlPasswordInput pwd=login.getInputByName("password");

DomNodeList btn=login.getElementsByTagName("button");

HtmlButton submit=(HtmlButton)btn.get(0);

email.setText(key.trim());

pwd.setText(map.get(key));

submit.click();

  这里登录成功,是不是很简单,我们不需要操作cookies,这次模拟的是Chrome浏览器登录

  备注和评论

  Listforms=page.getForms();表示获取页面上的所有Form表单

  HtmlForm login=forms.get(0); 由于整个页面只有一个表单,直接取第一个

  HtmlTextInput email=login.getInputByName("email");获取页面表单上的email输入框

  HtmlPasswordInput pwd=login.getInputByName("password");获取页面上的密码输入框

  下面两句用于获取页面的登录按钮

  DomNodeListbtn=login.getElementsByTagName("button");

  HtmlButton submit=(HtmlButton)btn.get(0);

  下面两句用于设置邮箱和密码

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线