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

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

在 Typescript 中,如何在存儲(chǔ)然后從數(shù)組訪問所述對象時(shí)維護(hù)對象類型?

在 Typescript 中,如何在存儲(chǔ)然后從數(shù)組訪問所述對象時(shí)維護(hù)對象類型?

慕容3067478 2021-06-02 09:00:13
在打字稿中,我注意到當(dāng)我將一個(gè)復(fù)雜對象放入一個(gè)數(shù)組中時(shí),當(dāng)我嘗試從數(shù)組中訪問該對象時(shí),它會(huì)丟失其類型,而只是變成了類型對象。例如let myArray = return await this.browser.evaluate((sel: string) => Array.from(document.querySelectorAll(sel)), selector)document.querySelectorAll(sel)返回一個(gè)NodeList<Element>是ArrayLike。Array.from應(yīng)該將其NodeList轉(zhuǎn)換為元素?cái)?shù)組,但是一旦形成數(shù)組,所有數(shù)組元素都會(huì)失去它們的Element類型我有一個(gè)只接受 type 參數(shù)的函數(shù)Element,但是當(dāng)我嘗試將其myArray[0]作為參數(shù)傳入該函數(shù)時(shí),出現(xiàn)錯(cuò)誤:Error: Unsupported target type: object我嘗試了很多不同的方法來嘗試讓數(shù)組保持其對象類型,因此很難解釋其中的每一個(gè)。我想知道如何創(chuàng)建一個(gè)Elements數(shù)組并讓它們Element在以后訪問時(shí)繼續(xù)是s 而不是通用objects這是我所做的測試中的更多背景信息我要去這個(gè)頁面:https : //www.w3schools.com/html/html_tables.asp 并且我傳遞給評估的選擇器是table[id="customers"] tbody tr這應(yīng)該與表中出現(xiàn)的 6 行匹配。let test = await this.browser.evaluate((sel: string) => Array.from(document.querySelectorAll(sel)), selector)console.log('testy1: ', test)console.log('testy2: ', test[0])console.log('testy3: ', typeof(test[0]))當(dāng)我運(yùn)行上面的代碼時(shí),這是我在控制臺(tái)日志中得到的輸出:testy1:  [ {}, {}, {}, {}, {}, {}, {} ]testy2:  {}testy3:  object它似乎匹配從頁面中抓取元素,因?yàn)樗_返回了 6 個(gè)元素。但也許問題是返回的對象是空的?我不知道。我想我的問題可能與這個(gè)問題有關(guān):puppeteer page.evaluate querySelectorAll return empty objects但該問題的解決方案對我不起作用,因?yàn)?href 不是對象類型的屬性 Element
查看完整描述

2 回答

?
慕婉清6462132

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

這里的問題是您傳遞給的函數(shù)page.evaluate是在瀏覽器上下文內(nèi)(在瀏覽器頁面內(nèi))運(yùn)行的。要將結(jié)果從瀏覽器上下文發(fā)送到 Node.js 環(huán)境,結(jié)果將被序列化。


請參閱文檔中的返回類型page.evaluate:


返回: Promise< Serializable > Promise,它解析為的返回值pageFunction


在Serializable這里意味著你的數(shù)據(jù)將通過傳遞給Node.js的環(huán)境JSON.stringify,并有自動(dòng)解析為您服務(wù)。但是,此過程將刪除對象的任何不可序列化的屬性。這就是你最終得到許多空對象的原因。


在 puppeteer 中獲取元素句柄

要獲取頁面上元素的句柄,您需要使用page.$,它會(huì)創(chuàng)建一個(gè)對象(在您的 Node.js 環(huán)境中),該對象鏈接到瀏覽器上下文中的元素。這些句柄也可以傳遞給page.evaluate調(diào)用。要查詢多個(gè)元素,您可以使用函數(shù)page.$$。


代碼示例


這是一個(gè)示例,它首先查詢元素,然后將元素句柄傳遞給評估函數(shù)以讀取屬性。


const elementHandle = await page.$('a');

const result = await page.evaluate(el => el.href, elementHandle);

打字稿的使用

關(guān)于 TypeScript 的問題是,在這種情況下,TypeScript 無法正確預(yù)測類型。對于 TypeScript 編譯器來說,這看起來像一個(gè)普通的函數(shù)調(diào)用,而實(shí)際上,函數(shù)被發(fā)送到客戶端執(zhí)行。因此,在這種情況下,您必須自己轉(zhuǎn)換類型,否則 Typescript 將僅假定any為參數(shù)類型:


const elementHandle = await page.$('a');

const result = await page.evaluate((el: { href: string }) => el.href, elementHandle);


查看完整回答
反對 回復(fù) 2021-06-03
  • 2 回答
  • 0 關(guān)注
  • 240 瀏覽
慕課專欄
更多

添加回答

舉報(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)