基於HtmlUnit實現簡單登入、頁面跳轉以及獲取有用資料部分程式碼示例(示例網站:大潤發)
首先,我們將要獲取的目標內容為商戶訂單查詢結果:
如下程式碼為登入模組程式碼(由於驗證碼解析這部分目前沒做,只能手動識別):
/**
*
* @param username 使用者
* @param password 密碼
* @param otherParam 其它引數 區域 引數必須為數字 如: 0:華東;1:華北;2:東北;3:華中;4:華南
* @return
*/
@Override
public CrawlerMessage login(String username, String password, String otherParam) {
userName = username;
CrawlerMessage message = new CrawlerMessage(E10001,”登入成功!”);
try {
webClient = new WebClientTool().getHttpsWebClient();
HtmlPage home = webClient.getPage(“
DomNodeList list = home.getElementsByTagName("img");
HtmlImage codeImage = (HtmlImage) list.item(9);
codeImage.saveAs(new File("E:/rtmartCode.jpg"));
// logger.info(home.asText());
HtmlSelect select = home.getElementByName(“area”);
HtmlOption option = select.getOption(Integer.parseInt(otherParam));
option.setSelected(true);
HtmlInput idInput = home.getElementByName(“userid”);
idInput.setValueAttribute(username);
HtmlInput pwdInput = home.getElementByName(“passwd”);
pwdInput.setValueAttribute(password);
HtmlInput codeInput = home.getElementByName(“checkstr”);
String code = ScannerTool.getCode();
codeInput.setValueAttribute(code);
//根據js獲取頁面
// ScriptResult res = home.executeJavaScript(“act”);
// HtmlPage page2 = (HtmlPage) res.getNewPage();
//點選登入獲取頁面
HtmlInput loginBut = home.getElementByName(“image”);
HtmlPage userMain = loginBut.click();
//解決HttpClient獲取中文亂碼 ,用String物件進行轉碼
String userMainPage = new String(userMain.asText().getBytes(“ISO-8859-1”),”gb2312”);
System.out.println(“User Main:” + userMainPage);
if(!userMainPage.contains(“登出”)){
message.setCode(E10002);
message.setMessage(“登入失敗!”);
}
} catch (IOException e) {
message.setCode(E10003);
message.setMessage(“登入異常!”);
}
return message;
}
WebClientTools類:
public class WebClientTool {
private static WebClient webClient;
public WebClient getHttpClient(){ webClient = new WebClient(BrowserVersion.FIREFOX_24); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); return webClient; } public WebClient getHttpsWebClient() { webClient = new WebClient(BrowserVersion.FIREFOX_24); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setUseInsecureSSL(true); return webClient; }
}
登入成功以後,即可開始獲取目標資料:
//———————————–抽取方法———————————————-
public void showOrder(String path, String date) throws IOException {
String orderUrl = “https://supplier.rt-mart.com.cn/php/scm_orders_form_1.php?status=1“;
String orderDetailUrl = “https://supplier.rt-mart.com.cn/php/“;
HtmlPage orderMain = webClient.getPage(orderUrl);
String orderMainStr = new String(orderMain.asText().getBytes(“ISO-8859-1”),”gb2312”);
//取訂單編號
String temp = orderMainStr.substring(orderMainStr.indexOf(“免費樣機退貨)”));
String orderIdList = temp.substring(7,temp.indexOf(“騰訊大潤發”)).trim();
orderIdList = orderIdList.replaceAll(“\t”,”“).replaceAll(“\r\n”,”“);
//取訂單號陣列
String [] orderList = orderIdList.substring(1).split(“\*”);
HtmlForm orderForm = orderMain.getFormByName(“order”);
DomNodeList orderHrefList = orderForm.getElementsByTagName(“a”);
int index = orderHrefList.getLength();
String saveFile = FileUtil.getSaveFile(path, date, “rtmart”, userName, Order.name());
String href = “”;
for(int i=0; i
相關推薦
基於HtmlUnit實現簡單登入、頁面跳轉以及獲取有用資料部分程式碼示例(示例網站:大潤發)
首先,我們將要獲取的目標內容為商戶訂單查詢結果: 如下程式碼為登入模組程式碼(由於驗證碼解析這部分目前沒做,只能手動識別): /** * * @param username 使用者 * @param password
Android 跳轉許可權設定介面的終極適配(適配各大定製 ROM)
▲ 前言: 當我們的使用者使用App時不小心拒絕了某項必要許可權,而導致無法正常使用。這時候希望重新去開啟該許可權,那麼問題來了,Android廠家定製的room五花八門,很多時候卻發現找不到許可權管理的入口。為了解決這一問題,如果我們應用中直接提供許可權管理入口給
servlet中實現提示登入成功後跳轉到某一頁面
一般J2ee中Jsp+Servlet+JavaBean的servlet中實現的是DoGet和DoPost函式,主要用到DoPost函式打印出某一頁面。 我在servlet中進行了身份驗證,驗證成功後,提示登入成功,之後跳轉到個人主頁等其他頁面,也可以實現提示
react +webpack+express router實現登入與頁面跳轉
5、express app 利用passport實現登入驗證與跳轉 var express = require('express'); var app= express(); var passport = require('passport'); var Strategy = require('passp
Intent 意圖實現電話撥號器、一鍵撥號、頁面跳轉 (筆記)
1.Android四大元件Activity活動(頁面)Intent 意圖Service 服務Content Provider 內容提供者2.Intent 意圖 2.1電話撥號器//1.建立意圖物件Intent intent = new Intent();//2.設定動作in
實現幾秒後頁面跳轉
member settime meid var else mem html class function /* 功能: 實現幾秒後跳轉頁面 */ window.onload=function(){ goTime(); } var goUrl="memb
js+bootstrap實現分頁、頁碼跳轉
製作page.jsp,在其他頁碼引入,只需把最外層的form標籤的id設定為myForm; 其中 totalPages:共有多少頁;totalElements:共有有多少條記錄;currentPage:第幾頁 <%@ page language="jav
yii2basic模版之:9、頁面跳轉
2018年11月11日 16:51:21 安安1120 閱讀數:6 個人分類: yii2
JAVASCRIPT實現的WEB頁面跳轉以及頁面間傳值方法
除了form表單提交之外的方法 1.跳轉到新頁面,並且是在新視窗中開啟時: function gogogo() { //do someghing here... window.open("target.html"); } window是一個ja
Java Servlet【4】一個小的Servlet登入介面+頁面跳轉
我下午跟著實驗室的出去吃吃飯,感覺好累啊。把傍晚的學習時間也耽誤了很多,可是開心就好。晚上回來寫個博。總結一下今天接近2小時的學習。 看Servlet已經好幾天了也寫了3篇Servlet基礎知識的部落格,現在用它來寫一個小小的程式。 登
IOS_簡單地頁面跳轉以及NSNotificationCenter(通知中
實現頁面1跳轉到頁面2,頁面2填寫資料後返回到頁面1,頁面1的label會顯示資料. 首先畫介面,上面是Navigation Bar 給頁面2設定storyboard id : 針對頁面2建立一個類.並設定自定義類. 給按鈕GO新增一個Action: - (IB
Spring中利用攔截器控制登入及頁面跳轉
一、問題簡要描述: 在做web開發的時候往往會遇到這種情況,使用者在沒登入的情況下訪問一些需要身份驗證的頁面,系統會自動幫使用者跳轉到登入頁面,使用者登入成功後,不會返回一個固定的頁面,系統會跳轉到使用者之前訪問的頁面,使用者可以繼續進行剛才的操作。或者是session裡面
js實現頁面跳轉,和獲取當前頁面地址
and cat 直接 cati expand 當前 頁面跳轉 location 設置 JS有時候需要實現頁面跳轉,那麽可以直接在某個事件觸發中設置 location.href="/user/center/" 這樣即可實現頁面跳轉。 獲取當前頁面地址可以直接這樣
框架之TP5 頁面跳轉 / 以及url地址
<a href=">路由跳轉 tp框架跳轉需要用{}包住 裡面加上冒號(:) 括號中('控制器名稱/方法名稱') <a href="{:url('Login/xian')}">新增</a> 頁面訪問url地址 url
Android開發 - 頁面跳轉以及資料傳遞
Android開發 - 頁面跳轉以及資料傳遞 記錄程式碼詳情參閱Project-FoodList 教程: 頁面需要先在AndroidManifest.xml中註冊,否則會造成閃退 頁面註冊教程與講解 activity a
微信小程式頁面跳轉傳參填充資料的小案例
把index.wxml中data-postid的值,傳給detail.wxml的案例: 目錄結構: 1、在index.wxml中為需要傳值的列表繫結屬性和值,併為該列表繫結一個點選函式:
JSP中頁面跳轉後獲取表單資訊的方法述用到(hidden)(session)
假設現在有三個頁面分別是test1.jsp,test2.jsp,test3.jsp 在test1.jsp頁面中填寫名字username資訊 在test2.jsp頁面中填寫興趣愛好amuse資訊 頁面從test1.jsp中以表單形式跳轉到test2.jsp中,繼續以表單形
Prism中,頁面跳轉以及頁面之間傳遞引數(NavigationParameters)
一、頁面跳轉概述 在Prism中,使用Navigation來進行頁面之間的跳轉通常需要一下幾步: 1. 建立新頁面,並且實現INavigationAware介面 2. 使用IRegionManag
簡單兩步快速實現shiro的配置和使用,包含登錄驗證、角色驗證、權限驗證以及shiro登錄註銷流程(基於spring的方式,使用maven構建)
protect login uid sim isa 當前 sub efi inf 前言: shiro因為其簡單、可靠、實現方便而成為現在最常用的安全框架,那麽這篇文章除了會用簡潔明了的方式講一下基於spring的shiro詳細配置和登錄註銷功能使用之外,也會根據慣例在文章最
小程式頁面跳轉傳參-this和that的區別-登入流程-下拉選單-實現畫布自適應各種手機尺寸
小程式頁面跳轉傳參 根目錄下的 app.json 檔案 頁面檔案的路徑、視窗表現、設定網路超時時間、設定多 tab { "pages": [ "pages/index/index", "pages/logs/index" ], "window":