我需要刮刀:
打开无头浏览器,转到网址,登录(有蒸汽oauth),填写一些输入,点击2按钮
问题是无头浏览器的每个新实例都清除我的登录会话,然后我需要一次又一次地登录...如何通过实例保存它?例如使用带无头镀铬的木偶操纵者
或者我如何打开已登录的chrome无头实例?如果我已经登录了我的主要Chrome窗口
我想在页面加载不正确或遇到问题时重新加载页面。我试过了,page.reload()
但没有用。
for(const sect of sections ){
// Now collect all the URLs
const appUrls = await page.$$eval('div.main > ul.app-list > li > div.app-info a.app-info-icon', links => links.map(link => link.href));
// Visit each URL one by one and collect the data
for (let appUrl of appUrls) {
var count = i++;
try{
await page.goto(appUrl);
const appName = await page.$eval('div.det-name-int', div => div.innerText.trim());
console.log('\n' + count);
console.log(appName);
} catch(e){
console.log('\n' + count);
console.log('ERROR', e);
await page.reload();
}
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误: …
当我向下滚动时,我处于创建新内容的情况.新内容具有特定的类名.
如何继续向下滚动直到所有元素都已加载?换句话说,我想达到一个阶段,如果我继续向下滚动,没有新的东西会加载.
我正在使用代码向下滚动,再加上一个
await page.waitForSelector('.class_name');
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,在加载所有元素之后,代码继续向下滚动,没有创建新元素,最终我得到超时错误.
编辑:这是代码
await page.evaluate( () => {
window.scrollBy(0, window.innerHeight);
});
await page.waitForSelector('.class_name');
Run Code Online (Sandbox Code Playgroud) 我正在 M1 Macbook Pro 上运行 docker,这里我使用这个 docker 脚本
FROM node:current-buster
# Create and set user
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get update && apt install -y ./google-chrome-stable_current_amd64.deb
Run Code Online (Sandbox Code Playgroud)
这会引发错误
google-chrome-stable:amd64 : Depends: libasound2:amd64 (>= 1.0.16) but it is not installable
对于其他依赖项也是如此
我尝试过各种方法:
apt-get install -y wget gnupg ca-certificates procps libxss1 &&
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'&&
apt-get update &&
apt-get install -y google-chrome-stable
Run Code Online (Sandbox Code Playgroud)
(这会出现无法找到包的错误)
该脚本在 …
使用puppeteer,你怎么能以编程方式提交表单?到目前为止,我已经能够使用page.click('.input[type="submit"]')
如果表单实际包含提交输入.但是对于不包含提交输入的表单,关注表单文本输入元素和使用page.press('Enter')
似乎并不会导致表单提交:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://stackoverflow.com/', {waitUntil: 'load'});
console.log(page.url());
// Type our query into the search bar
await page.focus('.js-search-field');
await page.type('puppeteer');
// Submit form
await page.press('Enter');
// Wait for search results page to load
await page.waitForNavigation({waitUntil: 'load'});
console.log('FOUND!', page.url());
// Extract the results from the page
const links = await page.evaluate(() => {
const anchors = Array.from(document.querySelectorAll('.result-link a'));
return anchors.map(anchor …
Run Code Online (Sandbox Code Playgroud) 是否可以使用puppeteer(没有Web服务器)使用无头chrome打开本地html文件?我只能将它连接到本地服务器.
我可以看到setContent()api和goto()api和
我正在使用puppeteer进行E2E测试,现在尝试使用下面的代码填充输入字段.
await page.type('#email', 'test@example.com');
Run Code Online (Sandbox Code Playgroud)
它工作,但我发现电子邮件地址是一个字符一个字符键入字段,就好像一个真人正在打字.
是否可以让输入字段一次填充电子邮件地址?
使用Puppeteer,我想在Chrome中加载一个网址并捕获以下信息:
set-cookie
)捕获完整的响应体是导致我的问题的原因.
我试过的事情:
response.buffer
- 如果在任何时候有重定向,这不起作用,因为缓冲区在导航上被擦除getResponseBodyForInterception
- 这意味着我无法再访问encodedLength,在某些情况下我也遇到了获取正确请求和响应头的问题理想情况下,解决方案应该只有较小的性能影响,并且与正常加载页面没有任何功能差异.我也想避免分叉Chrome.
检查失败 crashForExceptionInNonABIComplianceCodeRange 其功能下面的代码是创建 PDF 文件
(async function() {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(pdfOutput);
await page.emulateMedia("screen");
await page.pdf({
path: "routes/planiton/pdf/mypdf.pdf",
format: "A4",
printBackground: true
});
console.log('done');
await browser.close();
//process.exit();
} catch (e) {
console.log("Our Error", e)
}
})();
Run Code Online (Sandbox Code Playgroud) 我的 PHP 容器运行 puppeteer 来生成 PDF。通过生成 PDF 文档,它还在我的容器内创建了两个核心转储文件。我不确定它们实际上来自哪里。
主机/服务器是 CentOS 7。
/var/log/messages
通过遵循https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ 的禁用核心转储部分,我已经完成了:
/etc/security/limits.conf
* soft core 0
* hard core 0
Run Code Online (Sandbox Code Playgroud)
通过以下方式创建了一个 disable-core-dumps.sh: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh
将以下内容添加到 /etc/systemd/coredump.conf
[Coredump]
Storage=none
ProcessSizeMax=0
Run Code Online (Sandbox Code Playgroud)
并重新启动服务器和容器。
我也试过ulimit -c 0
在容器内设置(高山)
以上技巧都不适合我。每次 puppeteer 生成 PDF 时,它总是会创建两个核心转储文件,如下所示:
* soft core 0
* hard core 0
Run Code Online (Sandbox Code Playgroud)
核心文件如下所示:
谁能帮我禁用核心转储?非常感谢。
puppeteer ×10
javascript ×5
node.js ×4
chromium ×2
docker ×2
alpine-linux ×1
apple-m1 ×1
automation ×1
cookies ×1
coredump ×1
e2e-testing ×1
headless ×1
linux ×1
unit-testing ×1
web-scraping ×1