UploadFromWebService.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  1. package com.example.demo.service;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.example.demo.base.Constants;
  5. import com.example.demo.domain.dto.UploadFileDTO;
  6. import com.example.demo.domain.entity.*;
  7. import com.example.demo.model.dto.TaskWebSocketDTO;
  8. import com.example.demo.model.dto.WebQueryDTO;
  9. import com.example.demo.util.*;
  10. import lombok.RequiredArgsConstructor;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.openqa.selenium.By;
  13. import org.openqa.selenium.WebDriver;
  14. import org.openqa.selenium.WebElement;
  15. import org.openqa.selenium.chrome.ChromeDriver;
  16. import org.openqa.selenium.chrome.ChromeOptions;
  17. import org.openqa.selenium.interactions.Actions;
  18. import org.openqa.selenium.support.ui.ExpectedConditions;
  19. import org.openqa.selenium.support.ui.WebDriverWait;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.context.annotation.Lazy;
  22. import org.springframework.stereotype.Service;
  23. import java.io.IOException;
  24. import java.math.BigDecimal;
  25. import java.text.DecimalFormat;
  26. import java.util.*;
  27. import java.util.concurrent.TimeUnit;
  28. import java.util.regex.Matcher;
  29. import java.util.regex.Pattern;
  30. /**
  31. * @author admin
  32. * @description 针对表【qrtz_task(定时任务表)】的数据库操作Service实现
  33. * @createDate 2023-03-15 13:40:32
  34. */
  35. @Slf4j
  36. @Service
  37. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  38. public class UploadFromWebService {
  39. private final FileUtils fileUtils;
  40. private final OutInterfaceService outInterfaceService;
  41. private final WebConfigService webConfigService;
  42. private final QrTaskService qrTaskService;
  43. private final QrTaskDetailService qrTaskDetailService;
  44. private final WebLoginConfigService webLoginConfigService;
  45. @Value("${driverUrl}")
  46. private String url;
  47. // 查询并上传(专利之星)
  48. public List<PatentCell> getPatentStar(WebQueryDTO webQueryDTO) throws Exception {
  49. List<PatentCell> patentCells = new ArrayList<>();
  50. //当前任务执行情况
  51. QrtzTaskDetail qrtzTaskDetail = qrTaskDetailService.getById(webQueryDTO.getTaskId());
  52. Integer successNum = qrtzTaskDetail.getSuccessNum();
  53. int startPage = successNum / 5;
  54. int startNum = successNum % 5;
  55. //当前任务条件
  56. QrtzTask qrtzTask = qrTaskService.getById(qrtzTaskDetail.getTaskId());
  57. //专利成功条数
  58. try {
  59. List<String> cells = webQueryDTO.getConCells();
  60. String conditions = webQueryDTO.getConditions();
  61. Integer id = webQueryDTO.getWebConfigId();
  62. //conditions = this.formatConditions(conditions);
  63. //根据id 获得网站配置
  64. WebConfig webConfig = webConfigService.getConfigById(id);
  65. //根据网站id和用户的租户获得登录信息
  66. WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webConfig.getId());
  67. if(webConfig==null){
  68. qrtzTaskDetail.setTaskDetailState(3);
  69. qrtzTaskDetail.setSuccessNum(successNum);
  70. qrtzTaskDetail.setDefaultNum(qrtzTaskDetail.getAllNum() - successNum);
  71. qrtzTaskDetail.setFailure("未配置登录信息");
  72. qrtzTaskDetail.setEndTime(new Date());
  73. qrtzTaskDetail.updateById();
  74. }
  75. //1.获得驱动
  76. // System.setProperty("webdriver.chrome.driver", "D:\\driver\\chromedriver.exe");
  77. System.setProperty("webdriver.chrome.driver", url);
  78. ChromeOptions chromeOptions = new ChromeOptions();
  79. // 设置无头模式
  80. chromeOptions.setHeadless(Boolean.TRUE);
  81. // 设置无轨 开发时还是不要加,可以看到浏览器效果
  82. chromeOptions.addArguments("-headless");
  83. chromeOptions.addArguments("no-sandbox");
  84. // 3.创建驱动
  85. WebDriver driver = new ChromeDriver(chromeOptions);
  86. // 4.创建动作
  87. Actions action = new Actions(driver);
  88. //设置等待时间
  89. long formSecond1 = 10;
  90. WebDriverWait wait1 = new WebDriverWait(driver, formSecond1);
  91. // 打开专利之星首页
  92. driver.get(webConfig.getWebAddress());
  93. wait1.until(ExpectedConditions.presenceOfElementLocated(By.id("loginname")));
  94. WebElement loginName = driver.findElement(By.id("loginname"));
  95. WebElement password = driver.findElement(By.id("password"));
  96. loginName.sendKeys(webLoginConfig.getLoginAccount());
  97. password.sendKeys(webLoginConfig.getLoginPassword());
  98. WebElement loginButton = driver.findElement(By.id("login"));
  99. loginButton.click();
  100. TimeUnit.MILLISECONDS.sleep(5000);//毫秒
  101. //获得表格搜索按钮并点击
  102. wait1.until(ExpectedConditions.presenceOfElementLocated(By.id("tablepage")));
  103. WebElement tablePage = driver.findElement(By.id("tablepage"));
  104. WebElement tablePagea = tablePage.findElement(By.tagName("a"));
  105. tablePagea.click();
  106. TimeUnit.MILLISECONDS.sleep(5000);//毫秒
  107. //获得搜索框并点击
  108. wait1.until(ExpectedConditions.presenceOfElementLocated(By.id("TxtSearch")));
  109. WebElement TxtSearch = driver.findElement(By.id("TxtSearch"));
  110. TxtSearch.sendKeys(conditions);
  111. WebElement searchBtn = driver.findElement(By.id("searchbtn2"));
  112. searchBtn.click();
  113. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("tcdNumber")));
  114. List<WebElement> tcdNumbers = driver.findElements(By.className("tcdNumber"));
  115. String pagesText = tcdNumbers.get(tcdNumbers.size() - 1).getText();
  116. int page = Integer.parseInt(pagesText);
  117. //获得总数
  118. WebElement countEle = driver.findElement(By.className("allcountlab"));
  119. String countText = countEle.getText();
  120. Integer count = Integer.parseInt(countText);
  121. //总数赋值给当前任务执行情况的总量属性
  122. qrtzTaskDetail.setAllNum(count);
  123. qrtzTaskDetail.updateById();
  124. String Handle = driver.getWindowHandle();
  125. //创建一个map集合存放浏览器句柄
  126. HashMap<String, String> handleMap = new HashMap<>();
  127. //将智慧芽句柄放到map中
  128. handleMap.put("mainPage", Handle);
  129. WebElement pagNum = driver.findElement(By.className("page_num"));
  130. pagNum.clear();
  131. pagNum.sendKeys(startPage+1+"");
  132. WebElement pagBtn = driver.findElement(By.className("page_btn"));
  133. pagBtn.click();
  134. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  135. //计算进度值
  136. double percentage = count == 0 ? 0 : (count.equals(successNum) ? (successNum * 1D) : (successNum + 1D) / count * 100D);
  137. percentage = MathUtils.saveTwoDecimal(percentage);
  138. for (int p = startPage; p < page; p++) {
  139. //等待数据加载
  140. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("patent")));
  141. TimeUnit.MILLISECONDS.sleep(1000);//毫秒
  142. //获得列表
  143. List<WebElement> patentContents = driver.findElements(By.className("patent"));
  144. // 页面元素标签
  145. for (int i = startNum; i < patentContents.size(); i++) {
  146. //查看任务状态
  147. QrtzTaskDetail qrtzTaskDetail1 = qrTaskDetailService.getById(webQueryDTO.getTaskId());
  148. if (qrtzTaskDetail1.getTaskDetailState().equals(7)) {
  149. qrtzTaskDetail1.setTaskDetailState(5);
  150. qrtzTaskDetail1.setSuccessNum(successNum);
  151. qrtzTaskDetail1.setTaskProcess(percentage);
  152. qrtzTaskDetail1.updateById();
  153. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  154. .setId(webQueryDTO.getTaskId())
  155. .setProjectId(webQueryDTO.getProjectId())
  156. .setComplete(false)
  157. .setIndex(successNum)
  158. .setTaskDetailState(5)
  159. .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
  160. return null;
  161. } else if (qrtzTaskDetail1.getTaskDetailState().equals(8)) {
  162. qrtzTaskDetail1.setTaskDetailState(6);
  163. qrtzTaskDetail1.setSuccessNum(successNum);
  164. qrtzTaskDetail1.setTaskProcess(percentage);
  165. qrtzTaskDetail1.updateById();
  166. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  167. .setId(webQueryDTO.getTaskId())
  168. .setProjectId(webQueryDTO.getProjectId())
  169. .setComplete(false)
  170. .setIndex(successNum)
  171. .setTaskDetailState(6)
  172. .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
  173. return null;
  174. }
  175. PatentCell patentCell = new PatentCell();
  176. patentCell.setProjectId(webQueryDTO.getProjectId());
  177. patentCell.setReportId(webQueryDTO.getReportId());
  178. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("title-color")));
  179. WebElement titleA = patentContents.get(i).findElement(By.className("title-color"));
  180. titleA.click();
  181. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  182. //9、获取到所有的句柄
  183. Set<String> set = driver.getWindowHandles();
  184. //10、循环找到详情窗口句柄
  185. for (String s : set) {
  186. //10.1、将详情窗口的句柄放到map中
  187. if (!s.equals(Handle)) {
  188. handleMap.put("detail", s);
  189. }
  190. }
  191. driver.switchTo().window(handleMap.get("detail"));
  192. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("item-content")));
  193. WebElement itemContent = driver.findElement(By.className("item-content"));
  194. List<WebElement> divItems = itemContent.findElements(By.tagName("div"));
  195. for (int t = 0; t < divItems.size(); t++) {
  196. WebElement temEle = divItems.get(t);
  197. String text = temEle.getText();
  198. String value = "";
  199. String[] strings = text.split(":");
  200. if (strings.length > 1) {
  201. value = strings[1].trim();
  202. String key = strings[0].trim();
  203. switch (key) {
  204. case "申请号":
  205. patentCell.setApplicationNo(value);
  206. break;
  207. case "申请日":
  208. patentCell.setApplicationDate(value);
  209. break;
  210. case "国家/省市":
  211. patentCell.setCountry(value);
  212. break;
  213. case "公开号":
  214. patentCell.setPublicNo(value);
  215. break;
  216. case "公开日":
  217. patentCell.setPubilcDate(value);
  218. break;
  219. case "授权公告号":
  220. patentCell.setPublicAccreditNo(value);
  221. break;
  222. case "授权公告日":
  223. patentCell.setPublicAccreditDate(value);
  224. break;
  225. case "主分类号":
  226. patentCell.setMainIpc(value);
  227. break;
  228. case "分类号":
  229. patentCell.setIpc(this.StringToList(value, ";"));
  230. break;
  231. case "申请人":
  232. patentCell.setApplicationPersons(this.StringToList(value, " "));
  233. break;
  234. case "申请人地址":
  235. patentCell.setApplicationAddress(this.StringToList(value, " "));
  236. break;
  237. case "发明人":
  238. patentCell.setInventors(this.StringToList(value, " "));
  239. break;
  240. case "当前权利人":
  241. patentCell.setApplicationCurrents(this.StringToList(value, " "));
  242. break;
  243. case "代理人":
  244. patentCell.setAgencyPersons(this.StringToList(value, " "));
  245. break;
  246. case "代理机构":
  247. patentCell.setAgency(value);
  248. break;
  249. case "范畴分类":
  250. patentCell.setClassical(value);
  251. break;
  252. case "当前状态":
  253. patentCell.setStatue(value);
  254. break;
  255. }
  256. }
  257. }
  258. //获得摘要
  259. WebElement abstrElement = driver.findElement(By.className("item-summary"));
  260. List<WebElement> spans = abstrElement.findElements(By.tagName("span"));
  261. if (cells.contains("1")) {
  262. String abstrText = spans.get(0).getText();
  263. patentCell.setAbstrText(abstrText);
  264. }
  265. //获得图片路径
  266. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("item-img")));
  267. WebElement picElement = driver.findElement(By.className("item-img"));
  268. WebElement imag = picElement.findElement(By.tagName("img"));
  269. String url = imag.getAttribute("src");
  270. url = fileUtils.uploadToLocal(url, ".jpg").getPath();
  271. patentCell.setPicUrl(url);
  272. if (cells.contains("2")) {
  273. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  274. WebElement CLElement = driver.findElement(By.id("itemCL"));
  275. CLElement.click();
  276. //获得主权要
  277. String mainRight = spans.get(1).getText();
  278. patentCell.setMainRignt(mainRight);
  279. //获得权要
  280. driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  281. List<WebElement> rightElements = driver.findElements(By.tagName("claim-text"));
  282. if (rightElements.size() == 0) {
  283. WebElement suBtn = driver.findElement(By.className("layui-layer-btn0"));
  284. suBtn.click();
  285. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  286. } else {
  287. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  288. List<String> rights = new ArrayList<>();
  289. rightElements.forEach(item -> {
  290. rights.add(item.getText());
  291. });
  292. patentCell.setRights(rights);
  293. }
  294. }
  295. if (cells.contains("3")) {
  296. //获得说明书
  297. WebElement DSElement = driver.findElement(By.id("itemDS"));
  298. DSElement.click();
  299. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  300. driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  301. List<WebElement> titleElements = driver.findElements(By.tagName("invention-title"));
  302. if(titleElements.size()==0){
  303. WebElement suBtn = driver.findElement(By.className("layui-layer-btn0"));
  304. suBtn.click();
  305. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  306. }
  307. else{
  308. WebElement titleElement =titleElements.get(0);
  309. patentCell.setTitle(titleElement.getText());
  310. StringBuilder stringBuilder = new StringBuilder();
  311. int flag = 1;
  312. //技术领域
  313. WebElement textElement1 = driver.findElement(By.tagName("description"));
  314. List<WebElement> textP1 = textElement1.findElements(By.tagName("p"));
  315. stringBuilder.append(textP1.get(0).getText());
  316. stringBuilder.append("\r\n");
  317. for (int t = 1; t < textP1.size(); t++) {
  318. String tem = String.format("%04d", flag);
  319. stringBuilder.append("[" + tem + "]" + textP1.get(t).getText());
  320. stringBuilder.append("\r\n");
  321. flag += 1;
  322. }
  323. patentCell.setPatentInstructionText(stringBuilder.toString());
  324. }
  325. }
  326. //获得pdf文档
  327. if (cells.contains("4")) {
  328. WebElement PDFElement = driver.findElement(By.id("itemPdf"));
  329. PDFElement.click();
  330. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  331. driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  332. List<WebElement> PDFFile = driver.findElements(By.tagName("embed"));
  333. String pdfUrl = "";
  334. if (PDFFile.size() == 0) {
  335. List<WebElement> PDFFiles = driver.findElements(By.className("pdfbtn"));
  336. if (PDFFiles.size() != 0) {
  337. pdfUrl = PDFFiles.get(0).getAttribute("data-url");
  338. } else {
  339. WebElement suBtn = driver.findElement(By.className("layui-layer-btn0"));
  340. suBtn.click();
  341. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  342. }
  343. } else {
  344. pdfUrl = PDFFile.get(0).getAttribute("src");
  345. }
  346. if (pdfUrl != "") {
  347. UploadFileDTO fileDTO = fileUtils.uploadToLocal(pdfUrl, ".PDF");
  348. patentCell.setPDFName(fileDTO.getFileName());
  349. patentCell.setPDFSize(fileDTO.getFileSize());
  350. patentCell.setPDFUrl(fileDTO.getPath());
  351. patentCell.setPdf(fileDTO);
  352. }
  353. }
  354. if (cells.contains("5")) {
  355. //获得法律状态
  356. WebElement flztElement = driver.findElement(By.id("flztbtn"));
  357. flztElement.click();
  358. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  359. wait1.until(ExpectedConditions.presenceOfElementLocated(By.id("legalContainer")));
  360. WebElement tBody = driver.findElement(By.id("legalContainer"));
  361. TimeUnit.MILLISECONDS.sleep(1000);//毫秒
  362. List<WebElement> trs = tBody.findElements(By.tagName("tr"));
  363. List<PatentCell.PatentAffair> affairs = new ArrayList<>();
  364. trs.forEach(item -> {
  365. List<WebElement> tds = item.findElements(By.tagName("td"));
  366. PatentCell.PatentAffair affair = new PatentCell.PatentAffair();
  367. affair.setDateTime(tds.get(0).getText());
  368. affair.setSimpleStatus(tds.get(1).getText());
  369. affair.setStatus(tds.get(2).getText());
  370. affairs.add(affair);
  371. });
  372. patentCell.setPatentAffairs(affairs);
  373. }
  374. successNum++;
  375. if (patentCell.getPublicNo() != null) {
  376. patentCell.setPatentNo(patentCell.getPublicNo());
  377. } else {
  378. patentCell.setPatentNo(patentCell.getPublicAccreditNo());
  379. patentCell.setPublicNo(patentCell.getPublicAccreditNo());
  380. }
  381. if (patentCell.getPatentNo() != null) {
  382. String res = outInterfaceService.importPatents(patentCell);
  383. JSONObject jsonObject = JSONObject.parseObject(res);
  384. if (jsonObject.get("code").toString().equals("500")) {
  385. //任务执行情况状态设为失败,任务条件状态设为已完成(若是任务条件是定时任务则设为等待下一次执行)
  386. qrtzTaskDetail.setTaskDetailState(3);
  387. qrtzTaskDetail.setSuccessNum(successNum);
  388. qrtzTaskDetail.setDefaultNum(count - successNum);
  389. qrtzTaskDetail.setEndTime(new Date());
  390. qrtzTaskDetail.updateById();
  391. if (qrtzTask.getTaskType() == 1) {
  392. qrtzTask.setTaskState(4);
  393. } else {
  394. qrtzTask.setTaskState(3);
  395. }
  396. qrtzTask.updateById();
  397. return null;
  398. }
  399. }
  400. QrtzTaskDetail qrtzTaskDetail11 =qrTaskDetailService.getById(qrtzTaskDetail.getId());
  401. percentage = count == 0 ? 0 : (count.equals(successNum) ? (successNum * 1D) : (successNum + 1D) / count * 100D);
  402. percentage = MathUtils.saveTwoDecimal(percentage);
  403. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  404. .setId(webQueryDTO.getTaskId())
  405. .setProjectId(webQueryDTO.getProjectId())
  406. .setComplete(false)
  407. .setIndex(successNum)
  408. .setPercentage(percentage)
  409. .setTaskDetailState(qrtzTaskDetail11.getTaskDetailState())
  410. .setFileName("")
  411. .setUrl("")
  412. .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
  413. patentCells.add(patentCell);
  414. driver.close();
  415. driver.switchTo().window(handleMap.get("mainPage"));
  416. }
  417. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("tcdPageCode")));
  418. List<WebElement> nexts = driver.findElements(By.className("nextPage"));
  419. if (nexts.size() != 0) {
  420. nexts.get(0).click();
  421. TimeUnit.MILLISECONDS.sleep(10000);//毫秒
  422. }
  423. }
  424. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  425. .setId(webQueryDTO.getTaskId())
  426. .setProjectId(webQueryDTO.getProjectId())
  427. .setComplete(true)
  428. .setIndex(count)
  429. .setPercentage(100D)
  430. .setTaskDetailState(qrtzTaskDetail.getTaskDetailState())
  431. .setFileName("")
  432. .setUrl("")
  433. .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "");
  434. //任务执行情况状态设为成功,任务条件状态设为已完成(若是任务条件是定时任务则设为等待下一次执行)
  435. qrtzTaskDetail.setTaskDetailState(2);
  436. qrtzTaskDetail.setSuccessNum(successNum);
  437. qrtzTaskDetail.setDefaultNum(qrtzTaskDetail.getAllNum() - successNum);
  438. qrtzTaskDetail.setTaskProcess(100);
  439. qrtzTaskDetail.setEndTime(new Date());
  440. qrtzTaskDetail.updateById();
  441. if (qrtzTask.getTaskType() == 1) {
  442. qrtzTask.setTaskState(4);
  443. } else {
  444. qrtzTask.setTaskState(2);
  445. }
  446. qrtzTask.updateById();
  447. driver.quit();
  448. } catch (Exception e) {
  449. log.error(e.toString());
  450. //任务执行情况状态设为失败,任务条件状态设为已完成(若是任务条件是定时任务则设为等待下一次执行)
  451. qrtzTaskDetail.setTaskDetailState(3);
  452. qrtzTaskDetail.setSuccessNum(successNum);
  453. qrtzTaskDetail.setDefaultNum(qrtzTaskDetail.getAllNum() - successNum);
  454. qrtzTaskDetail.setFailure("拉取节点失败");
  455. qrtzTaskDetail.setEndTime(new Date());
  456. qrtzTaskDetail.updateById();
  457. if (qrtzTask.getTaskType() == 1) {
  458. qrtzTask.setTaskState(4);
  459. } else {
  460. qrtzTask.setTaskState(3);
  461. }
  462. qrtzTask.updateById();
  463. }
  464. return patentCells;
  465. }
  466. public List<PatentCell> getPatentya(String patentVO) throws IOException, InterruptedException {
  467. //1.获得驱动
  468. System.setProperty("webdriver.chrome.driver", "D:\\driver\\chromedriver.exe");
  469. // 2.页面最大化
  470. ChromeOptions chromeOptions = new ChromeOptions();
  471. chromeOptions.addArguments("--start-maximized");
  472. // 3.创建驱动
  473. WebDriver driver = new ChromeDriver(chromeOptions);
  474. // 4.创建动作
  475. Actions action = new Actions(driver);
  476. // 打开智慧芽首页
  477. driver.get("https://account.zhihuiya.com");
  478. //设置等待时间
  479. long formSecond1 = 50;
  480. WebDriverWait wait1 = new WebDriverWait(driver, formSecond1);
  481. //等待密码登录界面加载
  482. wait1.until(ExpectedConditions.presenceOfElementLocated(By.id("tab-password")));
  483. // 点击密码登录
  484. driver.findElement(By.id("tab-password")).click();
  485. // 获取输入框,输入账号密码
  486. List<WebElement> ret = driver.findElements(By.className("el-input__inner"));
  487. ret.get(0).sendKeys("liting@china-wispro.com");
  488. ret.get(1).sendKeys("Lt199299");
  489. // 点击登录
  490. driver.findElement(By.className("el-button")).click();
  491. //等待加载
  492. TimeUnit.MILLISECONDS.sleep(1000);//毫秒
  493. List<WebElement> alerts = driver.findElements(By.className("patsnap-el-confirm"));
  494. if (alerts.size() != 0) {
  495. alerts.get(0).click();
  496. }
  497. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("master_nav-item__2nd_lv")));
  498. WebElement searchTag = driver.findElement(By.className("master_nav-item__2nd_lv"));
  499. searchTag.click();
  500. //等待搜索框加载
  501. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("div-textarea")));
  502. List<WebElement> ret1 = driver.findElements(By.className("div-textarea"));
  503. //搜索框赋值
  504. ret1.get(0).sendKeys(patentVO);
  505. TimeUnit.MILLISECONDS.sleep(2000);//毫秒
  506. wait1.until(ExpectedConditions.presenceOfElementLocated(By.className("search-form__btn")));
  507. WebElement rr = driver.findElement(By.className("search-form__btn"));
  508. rr.click();
  509. TimeUnit.MILLISECONDS.sleep(1000);//毫秒
  510. List<PatentCell> patentCells = new ArrayList<>();
  511. long formSecond = 50;
  512. WebDriverWait wait = new WebDriverWait(driver, formSecond);
  513. wait.until(ExpectedConditions.presenceOfElementLocated(By.className("search-result-standard-view__patent")));
  514. // String js ="document.getElementsByClassName('sidebar-table__right')[0].scrollBy(0, 8000)";
  515. // ((JavascriptExecutor) driver).executeScript(js);
  516. List<WebElement> ret2 = driver.findElements(By.className("search-result-standard-view__patent"));
  517. ret2.remove(ret2.size() - 1);
  518. List<WebElement> ret3 = driver.findElements(By.className("pn-cell-popover"));
  519. for (int i = 0; i < ret2.size(); i++) {
  520. action.moveToElement(ret3.get(i)).perform();
  521. wait.until(ExpectedConditions.attributeToBeNotEmpty(ret3.get(i), "href"));
  522. String patenNo = ret3.get(i).getAttribute("data-link-data");
  523. System.out.println(patenNo);
  524. }
  525. for (WebElement item : ret2) {
  526. List<WebElement> aLinks = item.findElements(By.tagName("a"));
  527. PatentCell patentCell = new PatentCell();
  528. aLinks.forEach(tem -> {
  529. String type = tem.getAttribute("data-link-type");
  530. if (type != null && type.equals("TITLE")) {
  531. String title = tem.getAttribute("data-link-data");
  532. patentCell.setTitle(title);
  533. } else if (type != null && type.equals("PN")) {
  534. String url = tem.getAttribute("href");
  535. patentCell.setUrl(url);
  536. String patenNo = tem.getAttribute("data-link-data");
  537. patentCell.setPatentNo(patenNo);
  538. } else if (type != null && type.equals("ANC")) {
  539. String applications = tem.getAttribute("data-link-data");
  540. patentCell.setApplications(applications);
  541. }
  542. });
  543. String legal = driver.findElement(By.className("legal-tag__LEGAL_STATUS")).getText();
  544. patentCell.setLegal(legal);
  545. patentCells.add(patentCell);
  546. }
  547. return patentCells;
  548. }
  549. //格式化参数
  550. public String formatConditions(String condition) throws IOException {
  551. String jsons = FileUtils.readerMethod();
  552. JSONObject jsonObject = new JSONObject();
  553. List<JSONObject> sources = JSONObject.parseArray(jsons, JSONObject.class);
  554. for (JSONObject jsonObject1 : sources) {
  555. jsonObject = jsonObject1;
  556. }
  557. condition = condition.replace(" ", "");
  558. condition = condition.replace("&&", "*");
  559. condition = condition.replace("||", "+");
  560. StringBuilder stringBuilder = new StringBuilder("F XX ");
  561. String pattern = "\\([^)]*\\)";
  562. Pattern p = Pattern.compile(pattern);
  563. Matcher m = p.matcher(condition);
  564. while (m.find()) { // 当字符串中有匹配到 {} 时
  565. String param = m.group(0);
  566. String cell = formatParam(param, jsonObject);
  567. condition = condition.replace(param, cell);
  568. }
  569. return condition;
  570. }
  571. public String formatParam(String param, JSONObject jsonObject) {
  572. param = param.replace("(", "");
  573. param = param.replace(")", "");
  574. String[] params = param.split("=");// {} 和里面的内容
  575. StringBuilder stringBuilder = new StringBuilder("(" + params[1]);
  576. stringBuilder.append("/");
  577. String cell = jsonObject.get(params[0]).toString();
  578. stringBuilder.append(cell + ")");
  579. return stringBuilder.toString();
  580. }
  581. //将值转换为list
  582. public List<String> StringToList(String value, String split) {
  583. List<String> list = new ArrayList<>();
  584. if (value != null && value != "") {
  585. String[] temValue = value.split(split);
  586. list = new ArrayList<>(Arrays.asList(temValue));
  587. }
  588. return list;
  589. }
  590. }