cf worker 代码有报错:export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { const browser = await puppeteer.launch(env.MYBROWSER); const page = await browser.newPage(); await page.goto(PH_URL); // img = (await page.screenshot()) as Buffer; const metrics = await page.metrics(); await browser.close(); 报错如下:Cannot read properties of undefined (reading 'fetch')
你遇到的错误 Cannot read properties of undefined (reading 'fetch')
可能是由于 puppeteer
在 Cloudflare Workers 环境中不被支持。Cloudflare Workers 是一个无服务器的JavaScript执行环境,基于V8引擎,但它不支持所有Node.js的API和库,特别是那些依赖于底层操作系统的库,如puppeteer
。
为了在Cloudflare Workers中实现类似的功能,你可以考虑使用其他方法,比如通过API调用来获取你需要的数据,或者使用其他不依赖于操作系统的库。
如果你确实需要在Cloudflare Workers中使用浏览器自动化功能,可以考虑以下替代方案:
使用无头浏览器服务:有一些在线服务提供无头浏览器的API,你可以通过HTTP请求来使用这些服务。例如,Browserless
或 Puppeteer as a Service
。
使用其他库:如果你只是需要进行一些简单的网页抓取,可以使用cheerio
等库,它们不依赖于操作系统。
以下是一个使用cheerio
的示例代码:
import cheerio from 'cheerio';
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const response = await fetch('https://example.com');
const html = await response.text();
const $ = cheerio.load(html);
// 例如,获取页面标题
const title = $('title').text();
return new Response(`Page title is: ${title}`);
}
};
如果你需要使用无头浏览器服务,可以参考以下示例:
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const response = await fetch('https://api.browserless.io/screenshot?token=YOUR_API_TOKEN', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com',
options: {
fullPage: true
}
})
});
const screenshot = await response.arrayBuffer();
return new Response(screenshot, {
headers: {
'Content-Type': 'image