nodejs - puppeteer 无头浏览器截图 iframe-CSDN博客
nodejs - puppeteer 无头浏览器截图 - 常规例子-CSDN博客
接上面两个,java后端调用代码
public File archiveInterfaceMethod(String url) {
log.info("jsLocal:{}", jsLocal);
log.info("fileLocal:{}", fileLocal);
log.info("redirectlogin:{}", redirectlogin);
// 从URL中提取 applicationNo 参数
String applicationNo = extractApplicationNo(url);
ProcessInstanceDTO proIns = processInstanceMapper.selectByApplicantNo(applicationNo);
//归档次数,用来做网页截图等待时间用
Integer archivesCount = 0;
if (proIns.getArchivesCount() != null) {
archivesCount = proIns.getArchivesCount();
}
log.info("流程归档,Extracted applicationNo: {}", applicationNo);
// 对URL进行转义处理
url = url + "&" + redirectlogin;//escapeUrl(url + "&" + redirectlogin);
log.info("流程归档,URL after escape: {}", url);
String[] command = {
"node", jsLocal, "--url", url, "--applicationNo", applicationNo, "--archivesCount", archivesCount.toString()
};
log.info("开始执行命令: {}", String.join(" ", command));
// 确保fileLocal变量正确指向预期的目录
File directory = new File(fileLocal);
if (!directory.exists()) {
// 如果目录不存在,尝试创建它
if (!directory.mkdirs()) {
Log.error("无法创建目录: {}", directory);
return null;
}
}
log.info("获取文件路径: {}", directory.getAbsolutePath());
// 构建最终生成文件的路径
File generatedFile = new File(directory, applicationNo + ".png");
//改成可重复归档
//if (generatedFile.exists()) {
// try {
// return processGeneratedFile(generatedFile, applicationNo);
// } catch (IOException e) {
// log.error("处理生成的文件时发生异常:{}", e.getMessage(), e);
// updateInsStatus(applicationNo, 2);
// return null;
// }
// }
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(directory);
// 将错误输出重定向到标准输出流
processBuilder.redirectErrorStream(true);
// 如果文件不存在,则执行命令生成文件
Process process = null;
try {
process = processBuilder.start(); // 使用ProcessBuilder启动进程
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
// 这将包括标准输出和错误输出
log.info("进程输出: {}", line);
}
}
int exitCode = process.waitFor();
log.info("进程退出码: " + exitCode);
if (exitCode == 0) {
return processGeneratedFile(generatedFile, applicationNo);
} else {
log.warn("进程失败,退出码: " + exitCode);
}
} catch (IOException | InterruptedException e) {
log.error("执行进程时发生异常", e);
// 处理中断
Thread.currentThread().interrupt();
}
return generatedFile;
}