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

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

puppeteer 評(píng)估/waitFor 方法中的文檔參考

puppeteer 評(píng)估/waitFor 方法中的文檔參考

翻閱古今 2021-06-29 09:51:50
我document對(duì) puppeteerevaluate方法中的參考感到困惑。官方文檔有一些代碼如下。在waitFor函數(shù)中,節(jié)點(diǎn)腳本中有文檔引用。我確實(shí)理解這些行很可能被執(zhí)行為:waitForHandler.toString()然后被傳輸?shù)綖g覽器環(huán)境以通過 WebSocket 連接運(yùn)行。無論如何,文檔和其他一些變量(例如window)在節(jié)點(diǎn)腳本中出現(xiàn)時(shí)確實(shí)會(huì)引起混淆,不是嗎?對(duì)此有任何解釋嗎?await page.waitFor(() => !!document.querySelector('.foo'));
查看完整描述

1 回答

?
小怪獸愛吃肉

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

是的,你說得很對(duì),這可能會(huì)引起混淆。


例子


const document = /* ... */;

await page.waitFor(() => !!document.querySelector('.foo'));

看起來代碼正在document從上面訪問變量,但這實(shí)際上并不是這里發(fā)生的事情,即使您的 IDE/語法高亮可能會(huì)告訴您它是相同的變量。


解釋


Node.js 環(huán)境和瀏覽器環(huán)境是兩個(gè)獨(dú)立的 (JavaScript) 環(huán)境,它們通過 WebSocket 進(jìn)行通信。因此,當(dāng)您在 Node.js 環(huán)境中的頁面上執(zhí)行函數(shù)時(shí),puppeteer 需要將該函數(shù)作為字符串發(fā)送到瀏覽器。對(duì)于這個(gè)puppeteer 將調(diào)用toString()給定函數(shù)上的函數(shù),該函數(shù)只返回您寫下的高級(jí)代碼。該字符串將被發(fā)送到瀏覽器并在其環(huán)境中執(zhí)行。


這也是您可以將字符串而不是函數(shù)傳遞給 puppeteer 的原因。如果您提交的是字符串而不是函數(shù),則代碼將在瀏覽器環(huán)境中執(zhí)行。


舉個(gè)例子,考慮這兩行,它們做同樣的事情(打印123到控制臺(tái)):


console.log(await page.evaluate(() => 123));

console.log(await page.evaluate('(() => 123)()'));

在第一行中,該函數(shù)作為函數(shù)傳遞(并且 puppeteer 會(huì)將其轉(zhuǎn)換為字符串并為您調(diào)用該函數(shù))。在第二行中,傳遞了相同的函數(shù),但這次我們必須自己調(diào)用它(函數(shù)周圍的額外括號(hào)僅出于語法原因才需要)。


為什么它會(huì)這樣工作?


為方便起見,Puppeteer 允許將函數(shù)作為函數(shù)(而不僅僅是作為字符串)傳遞。允許這樣做,可以很容易地發(fā)現(xiàn)任何小錯(cuò)誤,例如缺少括號(hào),因?yàn)樗鼈円呀?jīng)被您的 Node.js 環(huán)境拾?。摹癗ode.js JavaScript Parser”仍將解析您的函數(shù))。此外,它還可以輕松地在您的代碼編輯器中使用語法高亮。


但是,是的,很容易忘記這個(gè)抽象層意味著您使用的任何參數(shù)都需要作為單獨(dú)的參數(shù)傳遞,如下所示:


const value1 = 123;

await page.evaluate((value1) => { /... */ }, value1);

總而言之,如果您發(fā)現(xiàn)它令人困惑,您始終可以將代碼放入一個(gè)單獨(dú)的文件中,讀取該文件并將其內(nèi)容作為字符串在調(diào)用 puppeteer 函數(shù)時(shí)傳遞。這允許更好地分離您的代碼。值得付出努力嗎?你必須自己決定...


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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