【发布时间】:2019-12-25 22:11:42
【问题描述】:
现在我正在尝试使用 puppeteer 获取一些元素,以获取一些类项(div)。我知道 getElementsByClassName 返回一个列表,您必须对其进行解析。然而对我来说,这个函数只是说未定义,即使我在浏览器中尝试它(最新版本的 chrome)。
这是代码(顺便说一句打字稿):
private async getElementsFromBrowser(url : string) : Promise<any[]>{
const page : Page = await goToPage(url)
const result = await page.evaluate( arr => {
//this is where the error comes in
let setOfElements = document.getElementsByClassName('classnamethatexists');
arr = setOfElements;
return arr;
}
return Promise.resolve(result);
}
和html:
<div class='classnamethatexists'>"This is an example of the text I want to get"</div>
<div class='classnamethatexists'>"This is an example of the text I want to get"</div>
<div class='classnamethatexists'>"This is an example of the text I want to get"</div>
<div class='classnamethatexists'>"This is an example of the text I want to get"</div>
有没有办法让函数不返回未定义;
【问题讨论】:
-
问题一是“这段代码什么时候运行”?您是否记得将其标记为
defer以便它在 DOM 完成后运行,或者缺少它,使其在 DOMContentLoaded 发出信号后运行? -
代码在函数中运行,promise 被放入任何类型的数组中。所以就像`arrayOfElements = await getElementsFromBrowser。不,我没有使用延迟,应该吗?
标签: javascript html node.js typescript puppeteer