第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何將 Typescript/Javascript 函數(shù)附加到 Puppeteer 頁(yè)面上下文

如何將 Typescript/Javascript 函數(shù)附加到 Puppeteer 頁(yè)面上下文

有只小跳蛙 2023-04-14 17:28:10
我正在使用 Puppeteer 在 Typescript 中編寫一個(gè)網(wǎng)絡(luò)抓取應(yīng)用程序。我將一個(gè)帶有實(shí)用函數(shù)的 Javascript 文件“附加”到頁(yè)面實(shí)例,以使抓取更容易(這是使用 Pupeteer 的函數(shù)完成的,請(qǐng)參閱此處的page.addScriptTagAPI )。頁(yè)面上的實(shí)用程序功能之一可能如下所示:// functions.tsexport const getLink = (node: Element) => {  let link = node.querySelector("a");  return link ? link.href : null;};然后你可以使用里面的功能page.evaluate:// process.tsimport { getLink } from "../functions";interface LinkArgs {  page: puppeteer.Page;  selector: selector;}export const getLinkFromPage = async ({ page, selector }): LinkArgs) =>  page.evaluate((selector) => {    const link = getLink(selector); // I'm using the function here.    return link;  }, selectors);問(wèn)題是當(dāng)我這樣做時(shí),導(dǎo)入在開(kāi)發(fā)過(guò)程中失敗了。我相信這是因?yàn)榫幾gimport后export的語(yǔ)法在 chrome 中不起作用。這是我瀏覽器的錯(cuò)誤:Could not get links.  Error: Evaluation failed: ReferenceError: src_1 is not defined    at __puppeteer_evaluation_script__:2:20    at ExecutionContext._evaluateInternal (/Users/harrisoncramer/Desktop/Code/projects/gql3.0_schedulers/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:217:19)    at processTicksAndRejections (internal/process/task_queues.js:97:5)    at async ExecutionContext.evaluate (/Users/harrisoncramer/Desktop/Code/projects/gql3.0_schedulers/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:106:16)Evaluation failed: ReferenceError: src_1 is not defined    at __puppeteer_evaluation_script__:2:20我有一個(gè) hacky 解決方法:我將文件打入編譯器,然后從文件中functions.ts刪除所有關(guān)鍵字。然后,我從文件中刪除所有語(yǔ)句,如下所示:exportfunctions.jsimportprocess.ts// functions.jsconst getLink = (node) => {  let link = node.querySelector("a");  return link ? link.href : null;};// process.js    // Turning off this import...    // import { getLink } from "../functions"; interface LinkArgs {  page: puppeteer.Page;  selector: selector;}然而,這會(huì)破壞開(kāi)發(fā)過(guò)程中的類型檢查!解決這個(gè)問(wèn)題的更好方法是什么?!如何在不破壞 Typescript 類型檢查的情況下將已編譯的 Javascript 函數(shù)導(dǎo)入頁(yè)面?
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

它里面的任何東西page.evaluate本質(zhì)上都是在 Chrome 的 DevTools 控制臺(tái)中運(yùn)行的,或者在你這樣做時(shí)所處的相同上下文中運(yùn)行。所以導(dǎo)入在這種情況下不起作用,至少不是你嘗試的方式。您必須像這樣顯式地將函數(shù)傳遞到上下文中:


const getLink = (node) => {

  let link = node.querySelector("a");

  return link ? link.href : null;

};


// process.js


    // Turning off this import...

    // import { getLink } from "../functions"; 


interface LinkArgs {

  page: puppeteer.Page;

  selector: selector;

}


export const getLinkFromPage = async ({ page, selector }): LinkArgs) =>

  page.evaluate((selector, getLink) => {

    const link = getLink(selector); // I'm using the function here.

    return link;

  }, selectors, getLink);


查看完整回答
反對(duì) 回復(fù) 2023-04-14
  • 1 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)