htmlunit 抓取网页(Chrome浏览器如何模拟浏览器的登录,HtmlUnitPost的自我解剖)
优采云 发布时间: 2021-11-25 18:16htmlunit 抓取网页(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);
下面两句用于设置邮箱和密码