Javascript 循环遍历木偶演员元素数组,并进一步解析每个元素
哦,老兄,我一直在努力解决这个问题,我太困了 我需要遍历一系列DOM对象,并使用XPath选择器从每个对象中提取信息。我的源HTML在其元素上没有任何标识ID或类,因此需要大量的遍历 下面是一些(非常简化的)示例代码。目标是获取LI元素的列表,然后在每个元素上使用更多选择器来提取跨度内的名称 简化示例代码:()Javascript 循环遍历木偶演员元素数组,并进一步解析每个元素,javascript,puppeteer,Javascript,Puppeteer,哦,老兄,我一直在努力解决这个问题,我太困了 我需要遍历一系列DOM对象,并使用XPath选择器从每个对象中提取信息。我的源HTML在其元素上没有任何标识ID或类,因此需要大量的遍历 下面是一些(非常简化的)示例代码。目标是获取LI元素的列表,然后在每个元素上使用更多选择器来提取跨度内的名称 简化示例代码:() const html='1〕 乔 上下快速移动 '; const browser=wait puppeter.launch(); const page=wait browser
const html='1〕
-
乔
-
上下快速移动
';
const browser=wait puppeter.launch();
const page=wait browser.newPage();
wait page.goto(`data:text/html,${html}`);
//现在等待一秒钟,以便填充列表
让arrayOfNames=等待页面。评估(异步(页面)=>{
让结果=[];
让ulElements=wait page.$x('//ul');
//奇怪的是,我在这里得到一个对象,但我不应该得到一个数组吗?
log('get list of UL elements:',uleelements);
//使用上面的选择器遍历我们找到的每个项目
ulements.forEach(异步(项)=>{
让oneItem=wait item.$x('//li/div');
name=oneItem.$eval('span',element=>element.innerText);
log('We-found'+name);
结果:推送(姓名);
} );
返回结果;
},第页);
//如果成功,arrayOfNames=['Joe','Bob']
(是的,我知道使用这个示例HTML可以更轻松地完成任务。但是我正在解析的真正HTML非常复杂。这只是对我的问题的一个简化的了解。)
上面的代码失败了,说我有某种循环DOM引用。我不明白为什么。。。我一直在谷歌上搜索。。。我甚至不知道为什么以及如何在一个地方使用evaluate(),在另一个地方使用eval,然后我还阅读了evaluateHandler。。。这太令人困惑了。我不认为您可以在
页面中使用Puppeter API。evaluate()
:它在纯浏览器上下文中执行其函数参数代码,因此尝试在此处仅使用Web API。以下是实现目标的两种等效方法(使用选择器和XPath):
“严格使用”;
常量html=`
-
乔
-
上下快速移动
`;
const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch();
const[page]=wait browser.pages();
wait page.goto(`data:text/html,${html}`);
const arrayOfNames=等待页面。评估(()=>{
const results1=Array.from(
document.queryselectoral('ul li>div span'),
span=>span.innerText,
);
常量结果2=[];
const xpathList=document.evaluate(
“//ul//li/div//span”,
document.body,null,XPathResult.ORDERED\u NODE\u SNAPSHOT\u TYPE,null,
);
for(设i=0;i
和两个相等的结果:
[ [ 'Joe', 'Bob' ], [ 'Joe', 'Bob' ] ]
我不认为您可以在
page.evaluate()中使用Puppeter API:它在纯浏览器上下文中执行其函数参数代码,因此尝试在此处仅使用Web API。以下是实现目标的两种等效方法(使用选择器和XPath):
“严格使用”;
常量html=`
-
乔
-
上下快速移动
`;
const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch();
const[page]=wait browser.pages();
wait page.goto(`data:text/html,${html}`);
const arrayOfNames=等待页面。评估(()=>{
const results1=Array.from(
document.queryselectoral('ul li>div span'),
span=>span.innerText,
);
常量结果2=[];
const xpathList=document.evaluate(
“//ul//li/div//span”,
document.body,null,XPathResult.ORDERED\u NODE\u SNAPSHOT\u TYPE,null,
);
for(设i=0;i
和两个相等的结果:
[ [ 'Joe', 'Bob' ], [ 'Joe', 'Bob' ] ]