Merge remote-tracking branch 'origin/main'

This commit is contained in:
=
2026-03-11 11:04:11 +08:00
3 changed files with 50 additions and 60 deletions
+14 -1
View File
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<groupId>com.budwk</groupId>
<artifactId>zhgh-whcp</artifactId>
<artifactId>zhgh_hdc</artifactId>
<version>5.6.0-plus</version>
<properties>
<nutzboot.version>2.6.0-SNAPSHOT</nutzboot.version>
@@ -26,6 +26,19 @@
</properties>
<dependencies>
<!-- HtmlUnit 核心依赖 -->
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.70.0</version>
</dependency>
<!-- 可选:解决部分 JS 兼容性问题 -->
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit-core-js</artifactId>
<version>2.70.0</version>
</dependency>
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay-All</artifactId>
@@ -13,6 +13,8 @@ import com.budwk.app.sys.services.SysMenuService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import io.swagger.annotations.ApiOperation;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@@ -264,71 +266,46 @@ public class SysHomeController {
// @CacheResult(cacheKey = "news", ignoreNull = true, cacheLiveTime = 60 * 60 * 24)
public Result getNews() {
// 定义要爬取的URL
String domain = "https://gh.whcp.edu.cn";
try {
// 使用Jsoup连接到URL并获取页面内容
Document doc = Jsoup.connect(domain).get();
String domain = "https://dept.hdc.edu.cn/gh";
try (WebClient webClient = new WebClient()) {
// 关键配置:启用 JavaScript 执行(核心)
webClient.getOptions().setJavaScriptEnabled(true);
// 禁用 CSS 解析(节省资源,无需渲染样式)
webClient.getOptions().setCssEnabled(false);
// 忽略 JS 执行错误(避免页面个别 JS 报错导致程序中断)
webClient.getOptions().setThrowExceptionOnScriptError(false);
// 忽略页面加载异常
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
// 设置 JS 执行超时时间(根据页面调整)
webClient.getOptions().setTimeout(10000);
// 设置页面加载超时时间
webClient.getOptions().setTimeout(15000);
// 2. 加载页面并执行 JS(核心步骤:自动渲染 DOM)
HtmlPage page = webClient.getPage(domain);
// 等待 JS 执行完成(确保动态内容加载)
webClient.waitForBackgroundJavaScript(3000);
// 3. 获取渲染后的完整 HTML 源码
String renderedHtml = page.asXml(); // 或 page.asHtml()
// 4. 用 Jsoup 解析最终的 DOM 节点
Document doc = Jsoup.parse(renderedHtml);
JSONObject root = new JSONObject();
// 1. 新闻快讯(来自 .list1)
/* List<JSONObject> newsArray = new ArrayList<>();
Elements newsItems = doc.select(".ml .main_page2 .news_list li");
for (Element item : newsItems) {
String date = item.select(".date").text().trim();
Element link = item.select("a.text").first();
String title = link.select(".title").text().trim();
String url = link.attr("href").trim();
JSONObject node = new JSONObject();
node.set("title", title);
node.set("date", date);
node.set("url", domain + url);
newsArray.add(node);
}
root.set("news", newsArray);*/
// 2. 通知公告(来自 .list2)
List<JSONObject> noticesArray = new ArrayList<>();
Elements noticeItems = doc.select(".tu_text .news_list li");
Elements noticeItems = doc.select(".ul_show a");
for (Element item : noticeItems) {
String date = item.select(".news_meta").text().trim();
Element link = item.select(".news_title a").first();
String title = link.text().trim();
String url = link.attr("href").trim();
String date = item.select("p").text().trim();
String title = item.select("span").text().trim();
String url = item.attr("href").trim();
JSONObject node = new JSONObject();
node.set("title", title);
node.set("date", date);
node.set("url", domain + url);
node.set("url", "https://dept.hdc.edu.cn" + url);
noticesArray.add(node);
}
root.set("notices", noticesArray);
// 3. 基层风采(来自 .pic-list1)
/* List<JSONObject> grassrootsArray = new ArrayList<>();
Elements grassrootsItems = doc.select(".group3 .pic-list1 li");
for (Element item : grassrootsItems) {
Element link = item.select("a.img-scale").first();
String date = link.select(".date").text().trim();
String title = link.select(".title").text().trim();
String url = link.attr("href").trim();
String summary = link.select(".info").text().trim();
String imageUrl = "";
Element img = link.select("img").first();
if (img != null) {
imageUrl = img.attr("src").trim();
}
JSONObject node = new JSONObject();
node.set("title", title);
node.set("date", date);
node.set("url", domain + url);
node.set("summary", summary);
node.set("image", domain + imageUrl);
grassrootsArray.add(node);
}
root.set("grassroots", grassrootsArray);*/
return Result.success(root);
} catch (Exception e) {
log.error(e);
+4 -4
View File
@@ -1,11 +1,11 @@
nutz:
application:
name: zhgh_whcp_new
name: zhgh_hdc
mvc:
ignore: ^(.+[.])(jsp|png|gif|jpg|js|css|jspx|jpeg|html|mp3|mp4|ico|svg|vue)$
exclusions: /favicon/*,/assets/*,/druid/*,/upload/*,/components/*
server:
port: 8081
port: 80
host: 0.0.0.0
jetty:
@@ -21,7 +21,7 @@ jetty:
#结合ftp使用,或用nginx代理ftp路径
#staticPath: /Users/wizzer/temp/files
#开发模式静态资源
staticPathLocal: D:/myProject/zhgh_whcp_new/src/main/resources/static
staticPathLocal: D:/project/zhgh_hdc/src/main/resources/static
security:
tokenName: saToken
@@ -86,7 +86,7 @@ xsssql:
beetl:
RESOURCE:
#本地路径,开发时设置本地路径,便于调试
rootLocal: D:/myProject/zhgh_whcp_new/src/main/resources/views/
rootLocal: D:/project/zhgh_hdc/src/main/resources/views/
root: views/
DELIMITER_STATEMENT_START: "<!--#"
DELIMITER_STATEMENT_END: "#-->"