跳至主要内容

使用 Playwright 的网页

兼容性

仅在 Node.js 上可用。

此示例介绍了如何使用 Playwright 从网页加载数据。将为每个网页创建一份文档。

Playwright 是一个 Node.js 库,它提供了一个高级 API 来控制多个浏览器引擎,包括 Chromium、Firefox 和 WebKit。您可以使用 Playwright 自动执行网页交互,包括从需要 JavaScript 渲染的动态网页中提取数据。

如果您想要更轻量级的解决方案,并且您要加载的网页不需要 JavaScript 渲染,您可以使用CheerioWebBaseLoader

设置

npm install playwright

用法

import { PlaywrightWebBaseLoader } from "@langchain/community/document_loaders/web/playwright";

/**
* Loader uses `page.content()`
* as default evaluate function
**/
const loader = new PlaywrightWebBaseLoader("https://www.tabnews.com.br/");

const docs = await loader.load();

选项

以下是对您可以使用 PlaywrightWebBaseLoaderOptions 接口传递给 PlaywrightWebBaseLoader 构造函数的参数的解释。

type PlaywrightWebBaseLoaderOptions = {
launchOptions?: LaunchOptions;
gotoOptions?: PlaywrightGotoOptions;
evaluate?: PlaywrightEvaluate;
};
  1. launchOptions:一个可选对象,用于指定要传递给 playwright.chromium.launch() 方法的额外选项。这可能包括选项,例如 headless 标志,用于在无头模式下启动浏览器。

  2. gotoOptions:一个可选对象,用于指定要传递给 page.goto() 方法的额外选项。这可能包括选项,例如 timeout 选项,用于指定导航的最大时间(以毫秒为单位),或者 waitUntil 选项,用于指定何时将导航视为成功。

  3. evaluate:一个可选函数,可用于使用自定义评估函数在页面上评估 JavaScript 代码。这对于从页面中提取数据、与页面元素进行交互或处理特定 HTTP 响应非常有用。该函数应返回一个 Promise,该 Promise 解析为包含评估结果的字符串。

通过将这些选项传递给 PlaywrightWebBaseLoader 构造函数,您可以自定义加载程序的行为,并使用 Playwright 的强大功能来抓取和与网页交互。

以下是一个简单的示例

import {
PlaywrightWebBaseLoader,
Page,
Browser,
} from "@langchain/community/document_loaders/web/playwright";

const url = "https://www.tabnews.com.br/";
const loader = new PlaywrightWebBaseLoader(url);
const docs = await loader.load();

// raw HTML page content
const extractedContents = docs[0].pageContent;

以下是一个更高级的示例

import {
PlaywrightWebBaseLoader,
Page,
Browser,
} from "@langchain/community/document_loaders/web/playwright";

const loader = new PlaywrightWebBaseLoader("https://www.tabnews.com.br/", {
launchOptions: {
headless: true,
},
gotoOptions: {
waitUntil: "domcontentloaded",
},
/** Pass custom evaluate, in this case you get page and browser instances */
async evaluate(page: Page, browser: Browser, response: Response | null) {
await page.waitForResponse("https://www.tabnews.com.br/va/view");

const result = await page.evaluate(() => document.body.innerHTML);
return result;
},
});

const docs = await loader.load();

此页面是否有用?


您也可以在 GitHub 上留下详细的反馈 GitHub.