|
|
|
@ -1,5 +1,10 @@
|
|
|
|
package com.example.sbcamel.processor;
|
|
|
|
package com.example.sbcamel.processor;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
import org.apache.camel.Exchange;
|
|
|
|
import org.apache.camel.Exchange;
|
|
|
|
import org.apache.camel.Processor;
|
|
|
|
import org.apache.camel.Processor;
|
|
|
|
import org.htmlunit.WebClient;
|
|
|
|
import org.htmlunit.WebClient;
|
|
|
|
@ -8,11 +13,15 @@ import org.htmlunit.html.HtmlForm;
|
|
|
|
import org.htmlunit.html.HtmlPage;
|
|
|
|
import org.htmlunit.html.HtmlPage;
|
|
|
|
import org.htmlunit.html.HtmlPasswordInput;
|
|
|
|
import org.htmlunit.html.HtmlPasswordInput;
|
|
|
|
import org.htmlunit.html.HtmlTextInput;
|
|
|
|
import org.htmlunit.html.HtmlTextInput;
|
|
|
|
|
|
|
|
import org.jsoup.Jsoup;
|
|
|
|
|
|
|
|
import org.jsoup.nodes.Document;
|
|
|
|
|
|
|
|
import org.jsoup.nodes.Element;
|
|
|
|
|
|
|
|
import org.jsoup.select.Elements;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
|
|
|
|
|
|
import com.example.sbcamel.service.Session;
|
|
|
|
import com.example.sbcamel.service.Session;
|
|
|
|
|
|
|
|
|
|
|
|
public class InspectionProcessor implements Processor {
|
|
|
|
public class InspectionProcessor implements Processor {
|
|
|
|
|
|
|
|
|
|
|
|
@ -20,43 +29,43 @@ public class InspectionProcessor implements Processor {
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.login-url}")
|
|
|
|
@Value("${app.htmlunit.login-url}")
|
|
|
|
private String loginUrl;
|
|
|
|
private String loginUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.login-btn-selector}")
|
|
|
|
@Value("${app.htmlunit.login-btn-selector}")
|
|
|
|
private String loginBtnSelector;
|
|
|
|
private String loginBtnSelector;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.login-wait-millis:3000}")
|
|
|
|
@Value("${app.htmlunit.login-wait-millis:3000}")
|
|
|
|
private Long loginWaitMillis;
|
|
|
|
private Long loginWaitMillis;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.user-page-url}")
|
|
|
|
@Value("${app.htmlunit.user-page-url}")
|
|
|
|
private String userPageUrl;
|
|
|
|
private String userPageUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.vip1-page-url}")
|
|
|
|
@Value("${app.htmlunit.vip1-page-url}")
|
|
|
|
private String vip1PageUrl;
|
|
|
|
private String vip1PageUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.vip2-page-url}")
|
|
|
|
@Value("${app.htmlunit.vip2-page-url}")
|
|
|
|
private String vip2PageUrl;
|
|
|
|
private String vip2PageUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.vip3-page-url}")
|
|
|
|
@Value("${app.htmlunit.vip3-page-url}")
|
|
|
|
private String vip3PageUrl;
|
|
|
|
private String vip3PageUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${app.htmlunit.logout-url}")
|
|
|
|
@Value("${app.htmlunit.logout-url}")
|
|
|
|
private String logoutUrl;
|
|
|
|
private String logoutUrl;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void process(Exchange exchange) throws Exception {
|
|
|
|
public void process(Exchange exchange) throws Exception {
|
|
|
|
Session session = (Session) exchange.getMessage().getBody();
|
|
|
|
Session session = (Session) exchange.getMessage().getBody();
|
|
|
|
logger.info("session: {}", session);
|
|
|
|
logger.info("session: {}", session);
|
|
|
|
|
|
|
|
|
|
|
|
try (final WebClient webClient = new WebClient()) {
|
|
|
|
try (final WebClient webClient = new WebClient()) {
|
|
|
|
|
|
|
|
|
|
|
|
final HtmlPage loginPage = webClient.getPage(loginUrl);
|
|
|
|
final HtmlPage loginPage = webClient.getPage(loginUrl);
|
|
|
|
logger.info("loginPage: {}", loginPage.asXml());
|
|
|
|
logger.info("loginPage: {}", loginPage.asXml());
|
|
|
|
|
|
|
|
|
|
|
|
final HtmlForm form = loginPage.getForms().get(0);
|
|
|
|
final HtmlForm form = loginPage.getForms().get(0);
|
|
|
|
final HtmlTextInput usernameField = form.getInputByName("username");
|
|
|
|
final HtmlTextInput usernameField = form.getInputByName("username");
|
|
|
|
usernameField.type(session.getUsername());
|
|
|
|
usernameField.type(session.getUsername());
|
|
|
|
logger.info("entered username: {}", session.getUsername());
|
|
|
|
logger.info("entered username: {}", session.getUsername());
|
|
|
|
|
|
|
|
|
|
|
|
final HtmlPasswordInput passwordField = form.getInputByName("password");
|
|
|
|
final HtmlPasswordInput passwordField = form.getInputByName("password");
|
|
|
|
passwordField.type(session.getPassword());
|
|
|
|
passwordField.type(session.getPassword());
|
|
|
|
logger.info("entered password: {}", session.getPassword());
|
|
|
|
logger.info("entered password: {}", session.getPassword());
|
|
|
|
@ -64,23 +73,54 @@ public class InspectionProcessor implements Processor {
|
|
|
|
HtmlButton loginBtn = loginPage.querySelector(loginBtnSelector);
|
|
|
|
HtmlButton loginBtn = loginPage.querySelector(loginBtnSelector);
|
|
|
|
logger.info("loginBtn type: {}", loginBtn.getType());
|
|
|
|
logger.info("loginBtn type: {}", loginBtn.getType());
|
|
|
|
loginBtn.click();
|
|
|
|
loginBtn.click();
|
|
|
|
|
|
|
|
|
|
|
|
Thread.sleep(loginWaitMillis);
|
|
|
|
Thread.sleep(loginWaitMillis);
|
|
|
|
HtmlPage userPage = webClient.getPage(userPageUrl);
|
|
|
|
|
|
|
|
logger.info("userPage: {}", userPage.asXml());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlPage userPage = webClient.getPage(userPageUrl);
|
|
|
|
|
|
|
|
logger.info("userPage hashcode: {}", userPage.hashCode());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, List<String>> reply1 = new HashMap<>();
|
|
|
|
HtmlPage vip1Page = webClient.getPage(vip1PageUrl);
|
|
|
|
HtmlPage vip1Page = webClient.getPage(vip1PageUrl);
|
|
|
|
logger.info("vip1Page: {}", vip1Page.asXml());
|
|
|
|
Document doc = Jsoup.parse(vip1Page.asXml());
|
|
|
|
|
|
|
|
for (String selector : List.of(session.getSelector1(), session.getSelector2(), session.getSelector3())) {
|
|
|
|
|
|
|
|
Elements elements = doc.select(selector);
|
|
|
|
|
|
|
|
List<String> selectedList = new ArrayList<>();
|
|
|
|
|
|
|
|
for (Element element : elements) {
|
|
|
|
|
|
|
|
logger.info("[vip1Page] {} -> {}", selector, element.html());
|
|
|
|
|
|
|
|
selectedList.add(element.html());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
reply1.put(selector, selectedList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, List<String>> reply2 = new HashMap<>();
|
|
|
|
HtmlPage vip2Page = webClient.getPage(vip2PageUrl);
|
|
|
|
HtmlPage vip2Page = webClient.getPage(vip2PageUrl);
|
|
|
|
logger.info("vip2Page: {}", vip2Page.asXml());
|
|
|
|
doc = Jsoup.parse(vip2Page.asXml());
|
|
|
|
|
|
|
|
for (String selector : List.of(session.getSelector1(), session.getSelector2(), session.getSelector3())) {
|
|
|
|
|
|
|
|
Elements elements = doc.select(selector);
|
|
|
|
|
|
|
|
List<String> selectedList = new ArrayList<>();
|
|
|
|
|
|
|
|
for (Element element : elements) {
|
|
|
|
|
|
|
|
logger.info("[vip2Page] {} -> {}", selector, element.html());
|
|
|
|
|
|
|
|
selectedList.add(element.html());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
reply2.put(selector, selectedList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, List<String>> reply3 = new HashMap<>();
|
|
|
|
HtmlPage vip3Page = webClient.getPage(vip3PageUrl);
|
|
|
|
HtmlPage vip3Page = webClient.getPage(vip3PageUrl);
|
|
|
|
logger.info("vip3Page: {}", vip3Page.asXml());
|
|
|
|
doc = Jsoup.parse(vip3Page.asXml());
|
|
|
|
|
|
|
|
for (String selector : List.of(session.getSelector1(), session.getSelector2(), session.getSelector3())) {
|
|
|
|
HtmlPage logoutPage = webClient.getPage(logoutUrl);
|
|
|
|
Elements elements = doc.select(selector);
|
|
|
|
logger.info("logoutPage: {}", logoutPage.asXml());
|
|
|
|
List<String> selectedList = new ArrayList<>();
|
|
|
|
|
|
|
|
for (Element element : elements) {
|
|
|
|
|
|
|
|
logger.info("[vip3Page] {} -> {}", selector, element.html());
|
|
|
|
|
|
|
|
selectedList.add(element.html());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
reply3.put(selector, selectedList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
webClient.getPage(logoutUrl);
|
|
|
|
|
|
|
|
exchange.getMessage().setBody(Map.of("vip1Page", reply1, "vip2Page", reply2, "vip3Page", reply3));
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("LoginProcessor process error!", e);
|
|
|
|
logger.error("LoginProcessor process error!", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|