- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当从 headless chrome Playwright session (下面的代码)制作 PDF 时,我在左侧获得 PDF,而如果我通过在 chrome 中保存为 pdf,我得到第二个输出。
我已经明确地设置了边距并使用了 preferCSSPageSize: true
并且两者都给出了相同的(左)结果。
我如何让 Playwright 提供与 chrome 打印对话框中相同的输出?
files being printed is here 的示例. (在现实生活中,它们都略有不同以解释书脊宽度。)
const fs = require("fs");
const path = require("path");
const { chromium } = require("playwright");
const directoryPath = "outside";
(async () => {
const filesToPrint = getFilesToPrintList(directoryPath);
filesToPrint.forEach((f, i) => console.log(i, f));
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext();
for (let i = 0; i < filesToPrint.length; i++) {
const htmlFilename = path.join(directoryPath, filesToPrint[i]);
const pdfFilename = makePDFfilename(htmlFilename);
console.log("[html file]", htmlFilename);
console.log("[pdf file]", pdfFilename);
const page = await context.newPage();
await page.goto(
"file:///" + path.resolve(htmlFilename),
(waitUntil = "networkidle")
);
const options = {
path: pdfFilename,
pageRanges: "1",
preferCSSPageSize: true,
};
console.log(
`\n\nAbout to print:\n ${pdfFilename}\n`,
`with:\n${JSON.stringify(options, null, 2)}`
);
await page.pdf(options);
}
await browser.close();
console.log("done");
})();
function makePDFfilename(htmlFilename) {
const parts = htmlFilename.split(/[\\\._]/);
const pdfFilename = path.join(
directoryPath,
`Experimental_${parts[1]}_${parts[2]}.pdf`
);
return pdfFilename;
}
function getFilesToPrintList(directoryPath) {
let theFiles = fs
.readdirSync(directoryPath)
.filter((f) => f.includes("fp_") && f.includes(".html"));
return theFiles;
}
最佳答案
我试图重现您的问题:
我在您的 HTML 页面中使用了不同的背景图片 URL(在线),请参阅 test.html要点。
显然,许多选项都是默认值。参见 page.pdf()
.
此外,添加了 browser.newContext()
和 browser.close()
。
这是最简单的 NodeJS 代码:
生成-pdf.js
const { chromium } = require("playwright");
(async () => {
const htmlFilename = "file:///<file-path>/test.html";
console.log("[webpage]", htmlFilename);
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto(htmlFilename);
const pdfFilename = "./test.pdf";
console.log("[pdf file]", pdfFilename);
const options = {
path: pdfFilename,
pageRanges: "1",
preferCSSPageSize: true
};
console.log(
`\n\nAbout to print:\n ${pdfFilename}\n`,
`with:\n${JSON.stringify(options, null, 2)}`
);
await page.pdf(options);
await browser.close();
console.log("done");
})();
控制台输出:
$ node generate-pdf.js
[webpage] file:///<file-path>/test.html
[pdf file] ./test.pdf
About to print:
./test.pdf
with:
{
"path": "./test.pdf",
"pageRanges": "1",
"preferCSSPageSize": true
}
done
PDF 快照(test.pdf):
您可能想单独测试它,看看它是否适用于您的用例。
关于node.js - 使用 Playwright 制作 PDF 时控制页边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63224034/
使用 Java,我正在尝试等待对我正在等待的 Javascript 脚本之一的响应。 我已经发现我可以使用 waitForResponse ,但是如果在我到达 waitForResponse 语句之前
是否可以定义禁用 Javascript 的浏览器来模拟爬虫查看页面的方式?应该有一个可以通过的选项。 最佳答案 您可以通过javaScriptEnabled在 BrowserContext 选项中:
我想测试标题是否包含特定文本。有这方面的命令吗? await page.goto(‘'); expect(await page.$("data-testid=headline")).toBe("my
我想使用 playwright-python 自动填写一些表格。然后在提交前仔细检查填写内容。但它总是在代码运行结束时关闭浏览器。即使我使用了 handleSIGHUP=False、handleSIG
我目前正在使用 global-setup.ts 文件通过 playwright 加载 url。 await page.goto('https://test1.com/'); 我也在这里面做了额外的代码
在 Web 应用程序(在 React 中实现)中,当我按下特定按钮时,会打开一个新的浏览器选项卡。我想检查是否发生了这种情况以及新标签页的 URL 是否正确。 最佳答案 你可以这样实现它 // @ts
如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下: 1、同步写法:
playwright也是可以做接口测试的,但个人觉得还是没有requests库强大,但和selenium相比的话,略胜一筹,毕竟支持API登录,也就是说可以不用交互直接调用接口操作了。 怎么用 既
写在前面 还是有些絮叨的感觉,官方翻译和某些博主写那个玩楞,基本都是软件直接翻译后的产物。 读起来生硬不说,甚至有的时候不到是什么意思,真的是实在不敢恭维。 到底是什么意思? 就是你已经登陆过
一、前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议
一、如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下: 1、同步写法: from playwright.sync
如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy&nbs
一、命令行使用详解 使用Pytest插件在Playwright 中来编写端到端的测试。 1、命令行执行测试 pytest --browser webkit --headed 2、使用 pyte
一、常见元素定位 定位器是 Playwright 自动等待和重试能力的核心部分。简而言之,定位器代表了一种随时在页面上查找元素的方法,以下是常用的内置定位器。 1、按角色定位 按显式和隐式可访问
引用剧作家提供的文档,似乎钩子(Hook)(例如:afterAll/beforeAll)只能在规范/测试文件中使用,如下所示: // example.spec.ts import { test, ex
我是开发新手,我在创建一个 e2e 测试时遇到了一个真正的问题。 基本上,我有一个包含 2 行或更多行的表,每行有 5 列(标题、x、y、z 按钮)。 如何使用标题单击正确行上的按钮? (这是一个测试
目录 自动等待及元素执行方法 鼠标双击 获取元素焦点 鼠标悬停 鼠标点击 设置复选框取消或选中
哈喽,大家好,我是六哥!今天我来给大家分享一下如何使用playwight调用chrome插件,面向对象为功能测试及零基础小白,我尽量用大白话的方式举例讲解,力求所有人都能看懂,建议大家先收藏,以免后面
我有这段代码可以使用 python playwright 来定位链接: nfo_link = page.locator('the xpath').get_attribute('href') nfo_l
// foo.ts import { test as base } from "@playwright/test"; const test = base.extend({ foo: "hell
我是一名优秀的程序员,十分优秀!