我正在寻找有关无头浏览器中发生的事情的更多信息。过去我一直在使用不同的无头浏览器,例如slimmerJS、Phantom.js和Headless Chrome,目的是在不同的站点上截取屏幕截图。
我从来没有生成过与您在浏览器中看到的相似的真实、清晰质量的图像,它看起来像是一种工具限制,例如,这是您可以从中获得的最高质量,但我想了解为什么,以及可能如何使它变得更好。
请比较下面的例子。
如果将真实网站与屏幕截图进行比较,您可以看到图像是如何模糊的。在这个例子中,它只是一个图像,但这也发生在 HTML 文本中。
现在,如果我要使用我的计算机截取屏幕截图,无论是 windows、mac 还是 linux,我都会得到一个质量非常好的屏幕截图,看起来完全像真正的交易。
那么为什么会发生这种情况呢?我尝试了所有标准的事情,例如在每个库中设置最高质量的屏幕截图,并设置一个足够大的视口,以便屏幕截图具有合适的分辨率。这真的是您可以从无头浏览器屏幕截图中获得的最高质量吗?
对这方面的任何启示将不胜感激。谢谢!
javascript webautomation node.js google-chrome-headless puppeteer
是否可以将浏览器连接到 puppeteer 而无需在 puppeteer 中实例化它?例如,像普通用户一样运行一个 Chromium 实例,然后在代码中将它连接到一个 puppeteer 实例?
我正在寻找针对当前情况的更简单的解决方案。例如,您打开 google(任何其他网站),并且希望通过单击按钮(例如 Gmail)- 使用 Playwright 在新选项卡中打开此页面。
let browser, page, context;
describe('Check the main page view', function () {
before(async () => {
for (const browserType of ['chromium']) {
browser = await playwright[browserType].launch({headless: false});
context = await browser.newContext();
page = await context.newPage();
await page.goto(baseUrl);
}
});
after(async function () {
browser.close();
});
await page.click(tax);
const taxPage = await page.getAttribute(taxAccount, 'href');
const [newPage] = await Promise.all([
context.waitForEvent('page'),
page.evaluate((taxPage) => window.open(taxPage, '_blank'), taxPage)]);
await newPage.waitForLoadState();
console.log(await newPage.title());
Run Code Online (Sandbox Code Playgroud) 我刚刚安装了 playwright (v1.18.1) 来尝试一下 (Windows 11),我感觉有些不对劲。我可以正常运行 example.spec.ts 脚本,但如果我复制该文件然后尝试运行该副本,则会出现错误no tests found.
。
这些步骤看起来很基本...
\n首先测试运行 C:\\playwright\\test\\tests\\example.spec.ts 脚本...
\nC:\\playwright\\test\\tests>npx playwright test example.spec.ts\n\nRunning 25 tests using 1 worker\n\n - example.spec.ts:14:3 \xe2\x80\xba New Todo \xe2\x80\xba should allow me to add todo items\nTerminate batch job (Y/N)?\n\n 25 skipped\n
Run Code Online (Sandbox Code Playgroud)\n[这样有效]然后创建一个副本来开始玩......
\nC:\\playwright\\test\\tests>copy example.spec.ts test4.ts\n 1 file(s) copied.\n
Run Code Online (Sandbox Code Playgroud)\n但在编辑 test4.ts 之前,我检查它是否会运行...
\nC:\\playwright\\test\\tests>npx playwright test test4.ts\n\n=================\n no tests found.\n=================\nnpm ERR! code 1\nnpm ERR! path C:\\playwright\\test\\tests\nnpm ERR! command failed\nnpm ERR! command C:\\WINDOWS\\system32\\cmd.exe /d …
Run Code Online (Sandbox Code Playgroud) 由于 ESPN 不提供 API,我尝试使用 Puppeteer 来抓取有关我的梦幻足球联赛的数据。但是,由于登录表单与 iframe 元素嵌套,我很难尝试使用 puppeteer 登录。
我去了http://www.espn.com/login并选择了 iframe。除了主要部分,我似乎无法选择 iframe 中的任何元素
frame.$('.main')
Run Code Online (Sandbox Code Playgroud)
这是似乎通过登录表单获取 iframe 的代码。
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
await page.goto('http://www.espn.com/login')
await page.waitForSelector("iframe");
const elementHandle = await page.$('div#disneyid-wrapper iframe');
const frame = await elementHandle.contentFrame();
await browser.close()
Run Code Online (Sandbox Code Playgroud)
我希望能够访问 iframe 元素中的用户名字段、密码字段和登录按钮。每当我尝试访问这些字段时,都会返回 null。
嗨,我正在做一些网络自动化。我正在尝试打开一个 url,但我在 chrome 控制台中收到数据 URL 错误,所以我转向 firefox 控制台以解决在 chrome 控制台中打开的无数据 url 问题。问题是“npm install puppeteer-firefox”无法为 firefox 安装 puppeteer。如何为 firefox 安装 puppeteer 并将其包含在代码中以便我可以使用它?
由于数据 url 错误,代码在 chrome 中不起作用
const url = await page.evaluate(async () => {
document.querySelector('.n3VNCb').src;
});
url.toString();
await page.goto(url);
Run Code Online (Sandbox Code Playgroud)
我在 node.js 命令提示符中输入的内容来安装 puppeteer firefox。这没有用
npm i puppeteer-firefox
Run Code Online (Sandbox Code Playgroud)
我从 node.js 命令提示符收到的错误
npm WARN 已弃用 puppeteer-firefox@0.5.1:Firefox 支持正在逐渐过渡到 puppeteer 包。从 puppeteer v2.1.0 开始,您可以与 Firefox Nightly 进行交互。puppeteer-firefox > 包将一直可用,直到转换完成,但不再主动维护。有关更多信息,请访问https://wiki.mozilla.org/Remote
puppeteer-firefox@0.5.1 安装 C:\Users\user\Desktop\filename\filename\node_modules\puppeteer-firefox node install.js
错误:无法下载 Firefox rv0.0.1!错误:下载失败:服务器返回代码 404。网址:https : //github.com/puppeteer/juggler/releases/download/v0.0.1/firefox-win64.zip
我也尝试过这些,因为错误说要做,但它们没有用
(节点:14348)UnhandledPromiseRejectionWarning:错误:找不到最新的浏览器修订版。运行“PUPPETEER_PRODUCT=firefox …
我正在使用 Playwright 的 C# 语言绑定。
HTML 示例:
<select id="txtType" name="Type" class="form-control">
<option>Blog Posts</option>
<option>Books</option>
<option>Presentations</option>
<option>Videos</option>
<option>Podcasts</option>
<option>Examples</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我知道我可以用来Page.SelectOptionAsync
设置下拉列表的选定选项,但如何获取当前选定的选项?
当我查看 DropDown 的所有属性时,我看不出ElementHandles
.
我需要拦截网络请求并将其响应主体保存到变量中,这样我就可以使用 UI 上显示的值执行断言,但是当我尝试访问应该包含已保存响应主体的变量时,我会收到 [object Object]一个有效的机构。
JSON.stringify 也不能解决问题,因为我的变量变成了{"_type":"Page","_guid":"page@"}
而不是实际的响应。
这是代码:
const resp = await page.on('response', async response => {
if (response.url().includes('/some_url/') && response.status() === 200) {
console.log('BODY() ' + (await response.body())); //logs valid JSON response body
return await response.body();
}
})
console.log('RESPONSE' + resp); //logs RESPONSE[object Object]
Run Code Online (Sandbox Code Playgroud) javascript automated-tests webautomation e2e-testing playwright
我似乎无法找到如何做到这一点,我试图用python的机械化模块设置多个标头,例如:
br.addheaders = [('user-agent', ' Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3')]
br.addheaders = [('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]
Run Code Online (Sandbox Code Playgroud)
但它似乎只需要最后的br.addheaders ..所以它只显示'accept'标题,而不是'user-agent'标题,这让我相信每次调用'br.addheaders'都会覆盖任何以前的调用此..我无法想出包含2个或更多标题的语法,所以我非常感谢任何帮助..
我正在使用这个网站测试标题输出:
webautomation ×10
javascript ×8
node.js ×5
playwright ×5
puppeteer ×4
c# ×1
e2e-testing ×1
firefox ×1
http-headers ×1
iframe ×1
mechanize ×1
python ×1
tabs ×1