|
@@ -7,7 +7,9 @@ import java.io.File;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.StopWatch;
|
|
import org.springblade.config.PlaywrightProperties;
|
|
import org.springblade.config.PlaywrightProperties;
|
|
import org.springblade.dto.ScreenShotParam;
|
|
import org.springblade.dto.ScreenShotParam;
|
|
import org.springblade.dto.ScreenShotParam.Site;
|
|
import org.springblade.dto.ScreenShotParam.Site;
|
|
@@ -46,14 +48,14 @@ public class PlayWrightHandler {
|
|
/**
|
|
/**
|
|
* 截图
|
|
* 截图
|
|
*
|
|
*
|
|
- * @param url
|
|
|
|
- * @param token
|
|
|
|
- * @param waterMark
|
|
|
|
|
|
+ * @param param
|
|
* @return <id, fileUrl>
|
|
* @return <id, fileUrl>
|
|
*/
|
|
*/
|
|
public Kv screenshot(Site site, ScreenShotParam param) {
|
|
public Kv screenshot(Site site, ScreenShotParam param) {
|
|
BrowserContext browserContext = null;
|
|
BrowserContext browserContext = null;
|
|
|
|
+ StopWatch stopWatch = new StopWatch("模拟请求页面的耗时情况");
|
|
try {
|
|
try {
|
|
|
|
+ stopWatch.start("buildParams");
|
|
// 从池子中获取browserContext
|
|
// 从池子中获取browserContext
|
|
browserContext = browserContextPool.borrowObject();
|
|
browserContext = browserContextPool.borrowObject();
|
|
String id = site.getId();
|
|
String id = site.getId();
|
|
@@ -68,15 +70,22 @@ public class PlayWrightHandler {
|
|
page.setViewportSize(site.width(), site.height());
|
|
page.setViewportSize(site.width(), site.height());
|
|
String url = String.format("%s?watermark=%s&text=%s",
|
|
String url = String.format("%s?watermark=%s&text=%s",
|
|
playwrightProperties.getWebsiteDomain() + site.getUrl(), param.getWatermark(), param.getText());
|
|
playwrightProperties.getWebsiteDomain() + site.getUrl(), param.getWatermark(), param.getText());
|
|
- page.navigate(url, new NavigateOptions().setTimeout(0).setWaitUntil(WaitUntilState.NETWORKIDLE));
|
|
|
|
- // page.waitForConsoleMessage(new WaitForConsoleMessageOptions().setPredicate(t
|
|
|
|
- // -> t.text().equals("finished")), null);
|
|
|
|
- //打印页面错误日志信息
|
|
|
|
- page.onPageError(error -> log.info("[{}]页面出错了啊!!|website={},errorMsg={}", id, site.getUrl(), error));
|
|
|
|
|
|
+ page.onPageError(error -> log.info("[{}]页面出错了|{}", url, error));
|
|
|
|
+ page.onRequestFailed(request -> log.info("[{}]请求地址出错了|method={},error={}", request.url(), request.method(), request.failure()));
|
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
- log.info("[{}]请求完成时间:{}s", id, (System.currentTimeMillis() - oneTime) / 1000.f);
|
|
|
|
- log.info("[{}]开始截图", id);
|
|
|
|
|
|
+ stopWatch.start("navigate");
|
|
|
|
+ //跳转到URL,等待页面达到 networkidle 状态: 当没有网络连接活动时,即页面上所有的资源(如图片、脚本等)都已加载完毕,或者在一段时间内没有新的网络请求。
|
|
|
|
+ //最长等待6分钟
|
|
|
|
+ page.navigate(url, new NavigateOptions().setTimeout(360000).setWaitUntil(WaitUntilState.NETWORKIDLE));
|
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
|
|
+ stopWatch.start("wait10Secs");
|
|
|
|
+ //等待10s - 最后容忍10s
|
|
|
|
+ page.waitForTimeout(10000);
|
|
|
|
+ stopWatch.stop();
|
|
|
|
+
|
|
|
|
+ stopWatch.start("screenshot");
|
|
// 图片存储目录,按月份存储
|
|
// 图片存储目录,按月份存储
|
|
String month = DateUtil.format(new Date(), "yyyyMM");
|
|
String month = DateUtil.format(new Date(), "yyyyMM");
|
|
File dir = FileUtil.file(playwrightProperties.getScreenShotDir(), month);
|
|
File dir = FileUtil.file(playwrightProperties.getScreenShotDir(), month);
|
|
@@ -91,6 +100,7 @@ public class PlayWrightHandler {
|
|
.setFullPage(true);
|
|
.setFullPage(true);
|
|
// 开始截图
|
|
// 开始截图
|
|
page.screenshot(screenshotOptions);
|
|
page.screenshot(screenshotOptions);
|
|
|
|
+ stopWatch.stop();
|
|
// 开始截图
|
|
// 开始截图
|
|
// byte[] screenshotBytes = page.screenshot(screenshotOptions);
|
|
// byte[] screenshotBytes = page.screenshot(screenshotOptions);
|
|
// waterMark = StrUtil.isBlank(waterMark) ? "保密" : waterMark;
|
|
// waterMark = StrUtil.isBlank(waterMark) ? "保密" : waterMark;
|
|
@@ -109,6 +119,11 @@ public class PlayWrightHandler {
|
|
return null;
|
|
return null;
|
|
} finally { // 使用完后,返回池子
|
|
} finally { // 使用完后,返回池子
|
|
browserContextPool.returnObject(browserContext);
|
|
browserContextPool.returnObject(browserContext);
|
|
|
|
+ if(stopWatch.isRunning()) {
|
|
|
|
+ stopWatch.stop();
|
|
|
|
+ }
|
|
|
|
+ //打印最终耗时
|
|
|
|
+ log.info(stopWatch.prettyPrint(TimeUnit.SECONDS));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|