diff --git a/pom.xml b/pom.xml
index 897026e..2665f73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -288,6 +288,22 @@
easyexcel
3.3.4
-->
+
+
+ us.codecraft
+ webmagic-core
+ 1.0.0
+
+
+ us.codecraft
+ webmagic-extension
+ 1.0.0
+
+
+ com.microsoft.playwright
+ playwright
+ 1.47.0
+
@@ -329,7 +345,6 @@
-
diff --git a/src/main/java/jj/tech/paolu/Application.java b/src/main/java/jj/tech/paolu/Application.java
index 9c5447f..4a8e544 100644
--- a/src/main/java/jj/tech/paolu/Application.java
+++ b/src/main/java/jj/tech/paolu/Application.java
@@ -9,6 +9,9 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
+
/**
* @SpringBootApplication 是一个方便的注释, 它添加了以下所有内容:
@@ -43,6 +46,8 @@ public class Application {
// public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
// }
+
+ // called OK on docker "start "
public static void main(String[] args) {
diff --git a/src/main/java/jj/tech/paolu/biz/webadmin/component/Hgt8Component.java b/src/main/java/jj/tech/paolu/biz/webadmin/component/Hgt8Component.java
new file mode 100644
index 0000000..bb66fac
--- /dev/null
+++ b/src/main/java/jj/tech/paolu/biz/webadmin/component/Hgt8Component.java
@@ -0,0 +1,102 @@
+package jj.tech.paolu.biz.webadmin.component;
+
+import org.springframework.stereotype.Component;
+
+import com.microsoft.playwright.APIRequest;
+import com.microsoft.playwright.APIRequestContext;
+import com.microsoft.playwright.Browser;
+import com.microsoft.playwright.BrowserContext;
+import com.microsoft.playwright.BrowserType;
+import com.microsoft.playwright.Locator;
+import com.microsoft.playwright.Page;
+import com.microsoft.playwright.Playwright;
+import com.microsoft.playwright.options.AriaRole;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
+@Component
+public class Hgt8Component {
+
+ public Playwright playwright;
+ public Browser browser;
+ public BrowserContext browserContext;
+ public APIRequestContext aPIRequestContext;
+ public Page page;
+
+
+
+ @PostConstruct
+ public void start() throws Exception {
+
+ this.playwright = Playwright.create();
+ this.playwright.selectors().setTestIdAttribute("id");
+
+ this.browser = playwright.chromium().launch(
+ new BrowserType.LaunchOptions()
+ .setHeadless(false)
+ );
+
+ this.browserContext = browser.newContext();
+ this.browserContext.setDefaultNavigationTimeout(5000);
+
+
+ this.aPIRequestContext = browserContext.request();
+ //browserContext.newPage();
+
+ this.page = browserContext.newPage();
+
+
+
+ }
+
+ @PreDestroy
+ public void stop() {
+// page.close();
+ browser.close();
+ playwright.close();
+ System.out.println("Hgt8 is close");
+ }
+
+
+ public static void main(String[] args) {
+ try {
+ Playwright playwright = Playwright.create();
+ Browser browser = playwright.chromium().launch(
+ new BrowserType.LaunchOptions().setHeadless(false)
+ );
+ Page page = browser.newPage();
+// page.navigate("https://sse8.idc9998.com");
+ page.navigate("https://sol8.idc9998.com");
+
+
+
+ // Expect a title "to contain" a substring.
+
+
+ // create a locator
+ Locator getStarted = page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get Started"));
+
+ // Expect an attribute "to be strictly equal" to the value.
+// assertThat(getStarted).hasAttribute("href", "/docs/intro");
+
+ // Click the get started link.
+// getStarted.click();
+
+// assertThat(browser.close()).hasAttribute("href", "/docs/intro");
+
+// page.pause();
+
+ // Expects page to have a heading with the name of Installation.
+// assertThat(page.getByRole(AriaRole.HEADING,
+// new Page.GetByRoleOptions().setName("Installation"))).isVisible();
+ page.close();
+ browser.close();
+ playwright.close();
+
+
+ }catch (Exception e) {
+ // TODO: handle exception
+ }
+ }
+
+}
diff --git a/src/main/java/jj/tech/paolu/biz/webadmin/controller/Hgt8Controller.java b/src/main/java/jj/tech/paolu/biz/webadmin/controller/Hgt8Controller.java
new file mode 100644
index 0000000..82cd863
--- /dev/null
+++ b/src/main/java/jj/tech/paolu/biz/webadmin/controller/Hgt8Controller.java
@@ -0,0 +1,113 @@
+package jj.tech.paolu.biz.webadmin.controller;
+
+import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
+
+import java.util.HashMap;
+
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.microsoft.playwright.APIResponse;
+import com.microsoft.playwright.FrameLocator;
+import com.microsoft.playwright.Response;
+import com.microsoft.playwright.options.RequestOptions;
+
+import io.swagger.v3.oas.annotations.Operation;
+import jj.tech.paolu.biz.webadmin.component.Hgt8Component;
+import jj.tech.paolu.biz.webadmin.vo.YmCodeVo;
+import jj.tech.paolu.utils.R;
+import jj.tech.paolu.utils.YMHttp;
+
+@RestController
+@RequestMapping(value = "/op/hgt8",name = "导航到hgt8")
+public class Hgt8Controller {
+ @Autowired
+ public Hgt8Component hgt8Component;
+
+
+ @Operation(summary = "test", description = "test")
+ @PostMapping("/test")
+ public Object login(@Validated @RequestBody YmCodeVo prame) {
+// hgt8Component.page.navigate("https://sol8.idc9998.com/search.aspx");
+// hgt8Component.page.locator("xpath=//iframe[@id=lineCode]").fill("bk7897");
+// hgt8Component.page.getByTestId("lineCode").fill("bk7897");
+
+ hgt8Component.page.navigate("https://sol8.idc9998.com");
+ hgt8Component.page.frameLocator("#ifr_main")
+ .getByTestId("lineCode")
+ .fill("339hp");
+
+ hgt8Component.page.frameLocator("#ifr_main")
+ .locator("xpath=//input[@class='btn']")
+ .click();
+
+ Response response = hgt8Component.page.waitForResponse("**/captcha_image/2*", () -> {
+
+ });
+ byte[] image_bytes = response.body();
+
+ JsonNode root =
+ YMHttp.customApi(Base64.encodeBase64String(image_bytes));
+ JsonNode code_num = root.get("data").get("data");
+
+ //System.err.println(code_num.asText());
+ FrameLocator ifr_main = hgt8Component.page.frameLocator("#ifr_main");
+
+
+ ifr_main.getByTestId("userName")
+ .fill("bk7897");
+
+ ifr_main.getByTestId("password")
+ .fill("asas12123");
+
+ ifr_main.getByTestId("code")
+ .fill(code_num.asText());
+
+ ifr_main.getByTestId("btnSubmit")
+ .click();
+
+
+
+// assertThat(hgt8Component.page.frameLocator("#ifr_main")
+// .locator("xpath=//input[@class='protocol-btn-y']")).is;
+
+ //同意
+ hgt8Component.page.frameLocator("#ifr_main")
+ .locator("xpath=//input[@class='protocol-btn-y']")
+ .click();
+
+// ifr_main.getByTestId("tc_Close")
+// .click();
+ ifr_main.getByText("历史开奖")
+ .click();
+// Assert.assertEquals(apiPostResponse.status(), 201);
+
+// {"gameID":"G_24","currtentPage":1,"asDate":"2024-09-23","issuet":""}
+ HashMap pram = new HashMap();
+ pram.put("gameID", "G_24");
+ pram.put("currtentPage","1");
+ pram.put("asDate","2024-09-23");
+ pram.put("issuet", "");
+
+ RequestOptions requestOptions =
+ RequestOptions.create().setHeader("Content-Type", "application/json")
+ .setData(pram);
+
+ APIResponse addNewPet =
+ hgt8Component.aPIRequestContext.post("https://sol8.idc9998.com/wb2/jg0001/s001s", requestOptions);
+
+ System.err.println(addNewPet.text());
+
+
+
+ //ifr_main.getByTestId("captcha");
+
+ return R.SUCCESS("ok");
+ }
+}
diff --git a/src/main/java/jj/tech/paolu/biz/webadmin/controller/YMcodeController.java b/src/main/java/jj/tech/paolu/biz/webadmin/controller/YMcodeController.java
index 549f93d..b50ba26 100644
--- a/src/main/java/jj/tech/paolu/biz/webadmin/controller/YMcodeController.java
+++ b/src/main/java/jj/tech/paolu/biz/webadmin/controller/YMcodeController.java
@@ -20,10 +20,7 @@ public class YMcodeController {
@Operation(summary = "需要识别图片的base64字符串", description = "image_base64")
@PostMapping("/code")
public Object login(@Validated @RequestBody YmCodeVo prame) {
-
- Map map = YMHttp.customApi(prame.image_base64);
-
- return R.SUCCESS(map);
+ return R.SUCCESS(YMHttp.customApi(prame.image_base64));
}
diff --git a/src/main/java/jj/tech/paolu/utils/YMHttp.java b/src/main/java/jj/tech/paolu/utils/YMHttp.java
index df6c654..7804161 100644
--- a/src/main/java/jj/tech/paolu/utils/YMHttp.java
+++ b/src/main/java/jj/tech/paolu/utils/YMHttp.java
@@ -6,13 +6,41 @@ import java.util.Map;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class YMHttp {
+
public static ObjectMapper objectMapper = new ObjectMapper();
public static String ym_url = "http://api.jfbym.com/api/YmServer/customApi";
- public static Map customApi(String image_base64){
+// public static Map customApi(String image_base64){
+// try {
+// Map param = new HashMap<>();
+// param.put("token", "Cx08lMubmQauvOOhD0rp_qdnebs--Hi7bPdy9No6Uvw");
+// param.put("type", "10110");
+// param.put("image", image_base64);
+//
+// String stean = Request.Post(ym_url)
+// .connectTimeout(2500)
+// .socketTimeout(2500)
+// .bodyString(objectMapper.writeValueAsString(param), ContentType.APPLICATION_JSON)
+// .execute()
+// .returnContent()
+// .asString();
+//
+// @SuppressWarnings("unchecked")
+// HashMap jsonObject = objectMapper.readValue(stean, HashMap.class);
+//
+// return jsonObject;
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// return null;
+// }
+// }
+
+ public static JsonNode customApi(String image_base64){
try {
Map param = new HashMap<>();
param.put("token", "Cx08lMubmQauvOOhD0rp_qdnebs--Hi7bPdy9No6Uvw");
@@ -27,16 +55,12 @@ public class YMHttp {
.returnContent()
.asString();
- @SuppressWarnings("unchecked")
- HashMap jsonObject = objectMapper.readValue(stean, HashMap.class);
-
- return jsonObject;
+ return objectMapper.readTree(stean);
} catch (Exception e) {
e.printStackTrace();
+ return null;
}
-
- return null;
}
public static void main(String[] args) throws Exception{
@@ -63,9 +87,9 @@ public class YMHttp {
//
// }
- Map r =
- YMHttp.customApi("ss");
- System.out.println(r);
+// Map r =
+// YMHttp.customApi("ss");
+// System.out.println(r);
}
diff --git a/src/main/java/jj/tech/paolu/utils/crawler/Hgt8Processor.java b/src/main/java/jj/tech/paolu/utils/crawler/Hgt8Processor.java
new file mode 100644
index 0000000..194091d
--- /dev/null
+++ b/src/main/java/jj/tech/paolu/utils/crawler/Hgt8Processor.java
@@ -0,0 +1,151 @@
+package jj.tech.paolu.utils.crawler;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.fluent.Executor;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.cookie.BasicClientCookie;
+import org.apache.http.util.EntityUtils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import jj.tech.paolu.utils.YMHttp;
+import us.codecraft.webmagic.Page;
+import us.codecraft.webmagic.Site;
+import us.codecraft.webmagic.Spider;
+import us.codecraft.webmagic.processor.PageProcessor;
+
+public class Hgt8Processor implements PageProcessor {
+ private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
+
+ @Override
+ public Site getSite() {
+ return site;
+ }
+
+ @Override
+ public void process(Page page) {
+ page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
+ page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());
+ page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
+ if (page.getResultItems().get("name")==null){
+ //skip this page
+ page.setSkip(true);
+ }
+ page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));
+ }
+
+ public static void main(String[] args) throws Exception{
+
+
+
+// Spider.create(new Hgt8Processor()).addUrl("https://sse8.idc9998.com").thread(1).run();
+
+
+// Map param = new HashMap<>();
+// param.put("lineCode", "be358");
+// param.put("isSaveCode", "0");
+// ObjectMapper objectMapper = new ObjectMapper();
+//
+// String stean = Request.Post("https://sse8.idc9998.com")
+//
+// .connectTimeout(2500)
+// .socketTimeout(2500)
+// .bodyString(objectMapper.writeValueAsString(param), ContentType.APPLICATION_JSON)
+// .execute()
+// .returnContent()
+// .asString();
+// System.err.println(stean);
+
+
+ try {
+
+ BasicCookieStore cookieStore = new BasicCookieStore();
+ BasicClientCookie cookie = new BasicClientCookie("name", "vale");
+ cookie.setDomain("idc9998.com");
+ cookie.setPath("cookie");
+ cookieStore.addCookie(cookie);
+
+
+ CloseableHttpClient httpclient = HttpClients.custom()
+ .setDefaultCookieStore(cookieStore)
+ .build();
+
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ Map param = new HashMap<>();
+ param.put("lineCode", "be358");
+ param.put("isSaveCode", "0");
+ String paramString = objectMapper.writeValueAsString(param);
+
+ HttpPost httpPost = new HttpPost("https://sse8.idc9998.com");
+
+
+ StringEntity paramEntity = new StringEntity(paramString, ContentType.APPLICATION_JSON);
+ httpPost.setEntity(paramEntity);
+
+
+ CloseableHttpResponse response = httpclient
+ .execute(httpPost);
+
+ HttpEntity respoetEntity = response.getEntity();
+ String responseString = EntityUtils.toString(respoetEntity, "UTF-8");
+
+ System.out.println(responseString);
+
+
+
+
+ HttpPost httpPost1 = new HttpPost("https://sse8.idc9998.com/captcha_image/2?d="+"");
+ httpPost1.addHeader("content-type", ContentType.IMAGE_TIFF.toString());
+
+
+ CloseableHttpResponse response1 = httpclient
+ .execute(httpPost1);
+
+ //System.err.println(EntityUtils.toString(response1.getEntity(), "UTF-8"));
+ HttpEntity entity = response1.getEntity();
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ entity.writeTo(byteArrayOutputStream);
+
+ String image =
+ Base64.encodeBase64String(byteArrayOutputStream.toByteArray());
+
+ System.err.println(image);
+
+// JsonNode jsonNode =
+// YMHttp.customApi(image);
+// System.out.println(jsonNode);
+
+
+ response.close();
+ response1.close();
+
+ }catch (Exception e) {
+ System.out.println(e);
+ }
+
+
+
+
+ }
+
+}
diff --git a/src/main/java/jj/tech/paolu/utils/playwright/Hgt8.java b/src/main/java/jj/tech/paolu/utils/playwright/Hgt8.java
new file mode 100644
index 0000000..eff4a4f
--- /dev/null
+++ b/src/main/java/jj/tech/paolu/utils/playwright/Hgt8.java
@@ -0,0 +1,80 @@
+//package jj.tech.paolu.utils.playwright;
+//
+//import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
+//
+//import org.springframework.stereotype.Component;
+//
+//import com.microsoft.playwright.Browser;
+//import com.microsoft.playwright.BrowserType;
+//import com.microsoft.playwright.Locator;
+//import com.microsoft.playwright.Page;
+//import com.microsoft.playwright.Playwright;
+//import com.microsoft.playwright.options.AriaRole;
+//
+//import jakarta.annotation.PostConstruct;
+//import jakarta.annotation.PreDestroy;
+//@Component
+//public class Hgt8 {
+// public Playwright playwright;
+// public Browser browser;
+// public Page page;
+//
+// @PostConstruct
+// public void start() throws Exception {
+// this.playwright = Playwright.create();
+// this.browser = playwright.chromium().launch(
+// new BrowserType.LaunchOptions().setHeadless(false)
+// );
+// page = browser.newPage();
+// }
+//
+// @PreDestroy
+// public void stop() {
+// page.close();
+// browser.close();
+// playwright.close();
+// System.out.println("Hgt8 is close");
+// }
+//
+//
+// public static void main(String[] args) {
+// try {
+// Playwright playwright = Playwright.create();
+// Browser browser = playwright.chromium().launch(
+// new BrowserType.LaunchOptions().setHeadless(false)
+// );
+// Page page = browser.newPage();
+//// page.navigate("https://sse8.idc9998.com");
+// page.navigate("https://sol8.idc9998.com");
+//
+//
+// // Expect a title "to contain" a substring.
+//
+//
+// // create a locator
+// Locator getStarted = page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get Started"));
+//
+// // Expect an attribute "to be strictly equal" to the value.
+//// assertThat(getStarted).hasAttribute("href", "/docs/intro");
+//
+// // Click the get started link.
+//// getStarted.click();
+//
+//// assertThat(browser.close()).hasAttribute("href", "/docs/intro");
+//
+//// page.pause();
+//
+// // Expects page to have a heading with the name of Installation.
+//// assertThat(page.getByRole(AriaRole.HEADING,
+//// new Page.GetByRoleOptions().setName("Installation"))).isVisible();
+// page.close();
+// browser.close();
+// playwright.close();
+//
+//
+// }catch (Exception e) {
+// // TODO: handle exception
+// }
+// }
+//
+//}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index b1b0f07..dd13ae2 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -98,49 +98,4 @@ logging:
org.mybatis: info
org.mybatis.dynamic.sql: debug
jj.tech.paolu: info
- org.fisco.bcos.sdk: error
-
-#bcn
-### Required, node's {ip:port} to connect.
-system:
- peers: 192.168.0.180:20200
- ### Required
- groupId: 1
- ### Optional. Default will search conf,config,src/main/conf/src/main/config
- certPath: conf,src/main/resources/conf
- ### Optional. If don't specify a random private key will be used
- hexPrivateKey: '179b59aec0b9ea33ce6bcdc82a5fd343199bcd0be129ffe1d047a015c3dd0166'
- blockChainTablePrefix: 'SZTD_0611_1'
- blockChainProviderName: '深中通道-开发环境0611_1'
- syn2BlockConcurrentThreadCount: 100 #向区块链同步目录数据时的并发线程数,区块链服务器性能越好,此值可越高
- ### Optional. Please fill this address if you want to use related service
- contract:
- applicationAddress: '0x0685f9ec997695f3168e45363a2070fe7579426b'
- ### Optional. Please fill this address if you want to use related service
- fileAddress: '0x108d01a27e5426e28af3e0c237f8605ce92ee43e'
- ### Optional. Please fill this address if you want to use related service
- archivesFileAddress: '0x3a78f6ef2c8729cfd36a50fd9a233498b5fdfa3b'
- ### Optional. Please fill this address if you want to use related service
- catalogAddress: '0xadc69ae2af98cb20dadadbe106fccb4412f1c750'
- ### Optional. Please fill this address if you want to use related service
- providerAddress: '0x8b97b1a800789a0c060edc98a25a6ae8e88fcf53'
- readingRecordAddress: '0x9174823be980132fd6e14f5d74294c5830561f1d'
- decryptionRecordAddress: '0x790143aa4a2f1162b81f343c825b3d42a101efc7'
- downloadRecordAddress: '0x70296f76c871599cfb9940a7550f53aba555be00'
- certRecordAddress: '0x04106399e9d317d4cb0dc606a7201e203e1cffe7'
- createTableAddress: '0x1e5cbd200cb82fec444406772153de22a3502ba3'
- utilsAddress: '0xd0a601e191178f44e7f226d0ab4124ad440dfff2'
- orgCertAddress: '0x1a6d91b6a163040ca76fbf860fa968dbff35a264'
- personCertAddress: '0x4ab8b3e641774802217545295482272ecaa1ef54'
-
-weibai:
- appKey: SZTD00898
- appSecret: 16E58F6750C246818FBD84EAEF3FC998
- #getSortTreeUrl: http://api.weepal.cn/EAMS-XAPI/api/v1/sztd/getSortTree
- #getCatalogUrl: http://api.weepal.cn/EAMS-XAPI/api/v1/sztd/getCatalog
- #getAnnexUrl: http://api.weepal.cn/EAMS-XAPI/api/v1/sztd/getAnnex
- #getSortSubUrl: http://api.weepal.cn/EAMS-XAPI/api/v1/sztd/getSortSub
- getSortTreeUrl: http://127.0.0.1:8083/op/wb/getSortTree
- getCatalogUrl: http://127.0.0.1:8083/op/wb/getCatalog
- getAnnexUrl: http://127.0.0.1:8083/op/wb/getAnnex
- getSortSubUrl: http://127.0.0.1:8083/op/wb/getSortSub
+ org.fisco.bcos.sdk: error
\ No newline at end of file