我有
urls = ['url','url','url'...]
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的事情
urls.map(async (url)=>{
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: 'networkidle' });
})
Run Code Online (Sandbox Code Playgroud)
这似乎不等待页面加载并快速访问所有网址(我甚至尝试使用page.waitFor)
只是想知道我做了一些根本错误的事情,或者不建议/支持这种类型的功能
我正在尝试将jquery注入我的puppeteer页面,因为document.querySelector不会为我剪切它:
async function inject_jquery(page){
await page.evaluate(() => {
var jq = document.createElement("script")
jq.src = "https://code.jquery.com/jquery-3.2.1.min.js"
document.querySelector("head").appendChild(jq)
})
const watchDog = page.waitForFunction('window.jQuery !== undefined');
await watchDog;
}
Run Code Online (Sandbox Code Playgroud)
结果是它大部分时间超时.有没有人有办法解决吗?
我正在使用node.js和puppeteer来获取一些数据.我正在打开的一些文件很大......然后我收到一个错误:
错误:
our error { TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
at Promise.then (/project/node_modules/puppeteer/lib/NavigatorWatcher.js:74:21)
at <anonymous> name: 'TimeoutError' }
Run Code Online (Sandbox Code Playgroud)
如何忽略它或设置更高的超时?
那是我的剧本:
await page.goto('url'+tableCell04Val, {waitUntil: 'load'});
Run Code Online (Sandbox Code Playgroud) 我正在使用puppeteer获取一个页面,该页面在浏览器控制台中有一些错误,但是所有控制台消息都没有触发puppeteer的控制台事件.
puppeteer chromium浏览器显示多个控制台消息
但是,puppeteer只有控制台在节点中记录一件事
这是我目前使用的脚本:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('console', msg => console.log('PAGE LOG:', msg.text));
await page.goto('https://pagewithsomeconsoleerrors.com');
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
编辑:正如我在下面的评论中所述,我确实尝试了Everettss推荐但不起作用的page.waitFor(5000)命令.
Edit2:msg.text
意外删除了传播操作员.
Edit3:我在github上用类似但不同的示例屏幕截图打开了一个问题:https://github.com/GoogleChrome/puppeteer/issues/1512
我一直在运行以下代码,以便csv
从网站下载文件http://niftyindices.com/resources/holiday-calendar
:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('http://niftyindices.com/resources/holiday-calendar');
await page._client.send('Page.setDownloadBehavior', {behavior: 'allow',
downloadPath: '/tmp'})
await page.click('#exportholidaycalender');
await page.waitFor(5000);
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
随着headless: false
它的工作,它将文件下载到/Users/user/Downloads
.用headless: true
它不起作用.
我在macOS Sierra(MacBook Pro)上使用puppeteer版本运行1.1.1
它,它将Chromium版本拉66.0.3347.0
入.local-chromium/
目录并使用npm init
和npm i --save puppeteer
设置它.
有什么想法错了吗?
在此先感谢您的时间和帮助,
在加载.env
文件以将 env 值传递给getToken.js
cypress 根文件夹中的脚本时,会抛出无法找到模块 'dotenv' 错误。我已经安装了npm install dotenv
. 有人可以告诉我在这里缺少什么吗?.env
文件位于 cypress 根文件夹中。
环境:Windows 10 > git bash /命令提示符
const puppeteer = require("puppeteer");
require('dotenv').config({path: '.env'})
const baseURL = process.env.CYPRESS_BASE_URL
const testsUser = process.env.CYPRESS_TESTS_USERNAME
puppeteer
.launch({ headless: true, chromeWebSecurity: false, args: ['--no-sandbox'] })
.then(async browser => {
const page = await browser.newPage();
await page.goto(`${baseURL}/login`);
await page.waitFor(2000);
await page.waitForSelector("input[name=username]");
await page.type("input[name=username]", testsUser , {
delay: 50
});
browser.close();
});
Run Code Online (Sandbox Code Playgroud)
包.json
"scripts": {
"cy:run": "cypress run",
"get-token-main": …
Run Code Online (Sandbox Code Playgroud) 我希望连接到网站并下载一些 pdf 文件。该网站允许我们只有登录后才能查看内容。它要求我们使用OTP登录,并且不能同时在超过3台设备上登录。
我想下载列出的所有 pdf 文件。所以我之前尝试过
python playwright open --save-storage websitename.json
Run Code Online (Sandbox Code Playgroud)
保存登录信息。但它不适用于该特定网站。website.json 文件是空的,但它适用于其他网站。
因此,我能想到的唯一解决方案是连接到当前的浏览器,打开该网站,然后下载这些 pdf。
如果您对此有解决方案,甚至有其他方法,请告知。
我也在考虑转行做木偶师。但是,我不知道使用node.js解析html,因为我觉得使用css选择器更舒服,所以我无法切换它。
我需要能够在加载Puppeteer的页面上拦截XHR请求并返回模拟响应,以便为我的Web应用程序组织无后端测试.最好的方法是什么?
我创建了一个应用程序,create-react-app
并在Jest + Istanbul中编写了一些UI测试.
我想获得这些UI测试的代码覆盖率.我喜欢继续使用jest,因为我已经将它用于单元测试.
create-react-app
如果可能的话,我不想弹出.但如果别无选择,我会对此持开放态度.
到目前为止我尝试过的:
在 package.json
"scripts": {
"uitest": "react-scripts test --env=jsdom --verbose --testMatch='**/*.ui-test.{js}'",
}
Run Code Online (Sandbox Code Playgroud)
如果我跑 npm run uitest -- --coverage
^我认为在上面的场景中它只捕获测试而不是实际的App.
我该如何解决?
其他尝试失败:
1)如何覆盖伊斯坦布尔的React jsx文件? - 不要像我使用的那样申请create-react-app
2)https://github.com/facebook/create-react-app/issues/3257 - 显然这个功能被提出但被拒绝了.
3)https://github.com/istanbuljs/puppeteer-to-istanbul/issues/18 - 有一个名为puppeteer-to-istanbul的库,但它不支持源映射.(参见问题链接)
4)我也查看了关于safaribooks的Node.js Web开发 - 第四版的书 - 我找到了一个有用的Puppeteer指南,但它似乎没有涵盖,代码覆盖率.
5)在safaribooks上预订动手持续集成和交付 - 有一个关于Puppeteer + Jest测试的部分,没有说明代码覆盖率.
6)我试过puppeteer-to-istanbul
- >我们可以通过这种方式计算bundle的代码覆盖率,它不支持源映射.
7)尝试了Enselic的建议,但无法使其正常工作.push
尝试推送时,它似乎在自定义预设中的方法崩溃babel-plugin-istanbul
.
const puppeteer = require("puppeteer");
(async function main() {
try {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
page.setUserAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");
await page.goto("https://www.qimai.cn/rank/index/brand/all/genre/6014/device/iphone/country/us/date/2019-03-19", {waitUntil: 'load', timeout: 0});
await page.waitForSelector(".container");
const sections = await page.$$(".container");
const freeButton = await page.$('[href="/rank/index/brand/free/device/iphone/country/us/genre/6014/date/2019-03-19"]');
await freeButton.click();
// free list
const appTable = await page.waitForSelector(".data-table");
const lis = await page.$$(".data-table > tbody > tr > td");
// go to app content
const appInfo = …
Run Code Online (Sandbox Code Playgroud) puppeteer ×10
node.js ×3
javascript ×2
web-scraping ×2
chromium ×1
cypress ×1
dotenv ×1
istanbul ×1
jestjs ×1
jquery ×1
python-3.x ×1
reactjs ×1