我对React还是很陌生,我正在开发一个应用程序,它将获取网页的实际屏幕截图,并且该应用程序可以在所截取的屏幕截图之上绘制并添加涂鸦。最初,我使用html2canvas和domToImage拍摄客户端屏幕快照,但它无法完全呈现网页中显示的图像。
Reddit用户/ pamblam0建议我调查Google的Puppeteer。它的工作方式是启动无头铬浏览器,该浏览器转到我在本地主机上的react应用,然后轻松获取整个页面的屏幕截图。但是我的问题是,木偶戏在React应用程序中不能很好地发挥作用。它给了我一个ws错误,正如在Google搜索中所述,可以通过简单地安装ws来解决(顺便说一句不起作用)。
现在,我的操纵p脚本可以完成我的react应用程序。据我了解,它不适用于客户端应用程序(我可能错了)。我想发生的是,每当我从react应用程序中单击按钮时,puppeteer应该执行并返回base64字符串,然后将其传递到我的react应用程序中的组件。
到目前为止,这是我所做的。
puppeteerApp.js
const puppeteer = require('puppeteer');
const takeScreenshot = async () => {
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
const options = {
path: 'saved_images/webshot.png',
encoding: 'base64'
}
await page.goto('http://localhost:3000/', { waitUntil: 'networkidle2' });
const elem = await page.$('iframe').then(async (iframe) => {
return await iframe.screenshot(options)
});
await browser.close()
});
}
takeScreenshot();
Run Code Online (Sandbox Code Playgroud)
来自React应用的代码 App.js
import React, { Component } from 'react';
import ScreenshotsContainer from './containers/ScreenshotsContainer/ScreenshotsContainer'
import ImageContainer from './containers/ImageContainer/ImageContainer';
import html2canvas from 'html2canvas';
import …Run Code Online (Sandbox Code Playgroud) 从一页获取数据很简单,但是如何在从第一页获取数据后返回,进入新页面,从该页面获取数据..等等。我正在尝试在网站http://books.toscrape上执行此操作.com/ .
因此,我选择打印库存中有多少本书,因为只有输入链接才能访问它。例如,如果运行代码,您将得到:{ stock: 'In stock (22 available)' }
现在,我希望返回到原始页面,输入第二个链接并获取与前一个链接相同的信息。等等..
如何使用普通 JavaScript 来完成此操作?
const puppeteer = require('puppeteer');
let scrape = async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('http://books.toscrape.com/');
await page.click('#default > div > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.image_container > a > img');
await page.waitFor(1000);
const result = await page.evaluate(() => {
let stock = document.querySelector('#content_inner …Run Code Online (Sandbox Code Playgroud) I am facing this problem in puppeteer in a for loop when i go on another page to get data, then when i go back it comes me this error line:
Error "We have an error Error: the execution context was destroyed, probably because of a navigation."
Run Code Online (Sandbox Code Playgroud)
It's a directory page that contains 15 companies per page and then I want to visit each company to get information.
try {
const browser = await pupputer.launch({
headless: false,
devtools: true,
defaultViewport: …Run Code Online (Sandbox Code Playgroud) 我对这两个代码块的差异感兴趣。
const $anchor = await page.$('a.buy-now');
const link = await $anchor.getProperty('href');
await $anchor.click();
Run Code Online (Sandbox Code Playgroud)
await page.evaluate(() => {
const $anchor = document.querySelector('a.buy-now');
const text = $anchor.href;
$anchor.click();
});
Run Code Online (Sandbox Code Playgroud)
通常,我发现原始DOM元素page.evaluate()更易于使用,而$方法返回的ElementHandles是到目前为止的抽象。
但是我也许觉得异步Puppeteer方法可能更高效或更可靠?我在文档中找不到关于此的任何指导,并且有兴趣了解有关每种方法的专业人士/专业人士以及添加诸如之类的方法背后的动机的更多信息page.$$()。
我想获取一个 iframe 作为框架并单击框架中的一个元素,但是 iframe 没有名称并且网站有很多框架(page.frames()返回 14)。
而且我无权编辑 html。我只能编辑 JavaScript。
我认为在这种情况下识别 iframe 的最佳方法是从其父元素。
我怎样才能用 puppeteer 做到这一点?
<div id="foo">
<iframe>
#document
</iframe>
</div>
Run Code Online (Sandbox Code Playgroud) 我正在试验 Puppeteer Cluster,但我不明白如何正确使用排队。它只能用于不等待响应的呼叫吗?我正在使用 Artillery 同时发出一堆请求,但是当我直接执行命令时,它们都失败了,而只有一些失败。
我直接从示例中获取代码并替换execute为queue我期望工作的代码,除了代码不等待结果。有没有办法实现这一目标?
所以这有效:
const screen = await cluster.execute(req.query.url);
Run Code Online (Sandbox Code Playgroud)
但这打破了:
const screen = await cluster.queue(req.query.url);
Run Code Online (Sandbox Code Playgroud)
这是完整的示例queue:
const express = require('express');
const app = express();
const { Cluster } = require('puppeteer-cluster');
(async () => {
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
maxConcurrency: 2,
});
await cluster.task(async ({ page, data: url }) => {
// make a screenshot
await page.goto('http://' + url);
const screen = await page.screenshot();
return screen;
}); …Run Code Online (Sandbox Code Playgroud) 调用预测函数时浏览器中的 Tensorflow.js 错误
我正在使用 Node.js 来运行 webapp。这是我包含的脚本,我在 Chrome 中运行 Node.js 并且无法解决错误。
该项目有 7 个类作为输出,在形状为 1x7 的输出中是密集层。
https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js
https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js
https://code.jquery.com/jquery-3.3.1.slim.min.js
Run Code Online (Sandbox Code Playgroud)
这是我的 JavaScript 文件。
$(document).on('change', '#file', function() {
let reader = new FileReader();
reader.onload= function(){
let dataUrl = reader.result;
$('#selected-image').attr('src',dataUrl);
$('#type1-predict').empty();
$('#type2-predict').empty();
$('#type3-predict').empty();
$('#type4-predict').empty();
$('#type5-predict').empty();
$('#type6-predict').empty();
$('#type7-predict').empty();
}
let file = $('#file').prop('files')[0];
reader.readAsDataURL(file)
});
const CANCER_CLASSES = {
0:"Actinic Keratoses",
1:"Basal cell carcinoma",
2:"Benign keratosis",
3:"Dermatofibroma",
4:"Melanoma",
5:"Melanocytic nevi",
6:"Vascular skin",
}
let model;
(async function(){
model= await tf.loadLayersModel('http://localhost:81/model/model.json');
$('#pro').hide()
})();
$(document).on('click', …Run Code Online (Sandbox Code Playgroud) Github 上当前版本的 Tensorflow.js 包含 WEBGPU 后端,但运行时tf.getBackend()我webgl什至可以使用启用了 WEBGPU 的 Chrome Canary。另外运行tf.backend()似乎并不表明WEBGPU在那里。