Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Puppeter在跨度数组中为div ID刮取文本_Javascript_Html_Node.js_Puppeteer_Scrape - Fatal编程技术网

Javascript 使用Puppeter在跨度数组中为div ID刮取文本

Javascript 使用Puppeter在跨度数组中为div ID刮取文本,javascript,html,node.js,puppeteer,scrape,Javascript,Html,Node.js,Puppeteer,Scrape,我有这个HTML: -潜水大师 -鱼类鉴定 -水下领航员 -EFR初级保健与AED -搜寻与回收潜水员 -深水潜水员 -沉船潜水员 -分频器 -意识到珊瑚礁保护 -帕迪海豹队 -泡泡制造商 -高级公开水域潜水员 -峰值性能浮力潜水员 -水肺潜水员 -救援潜水员 -探索潜水 -PADI主印章团队 -项目意识 -公开水域潜水员 -冒险潜水员 -潜水员 我想获取具有该ID的DIV的每个跨度内的文本,并将每个文本元素作为数组返回,如何实现这一点?我已经尝试了一切…最简单的一行解决方案是收集页面上下文

我有这个HTML:


-潜水大师
-鱼类鉴定
-水下领航员
-EFR初级保健与AED
-搜寻与回收潜水员
-深水潜水员
-沉船潜水员
-分频器
-意识到珊瑚礁保护
-帕迪海豹队
-泡泡制造商
-高级公开水域潜水员
-峰值性能浮力潜水员
-水肺潜水员
-救援潜水员
-探索潜水
-PADI主印章团队
-项目意识
-公开水域潜水员
-冒险潜水员
-潜水员

我想获取具有该ID的DIV的每个跨度内的文本,并将每个文本元素作为数组返回,如何实现这一点?我已经尝试了一切…

最简单的一行解决方案是收集页面上下文中的所有
元素-它在后台运行
数组.from(document.querySelectorAll(selector))
。当它返回一个元素数组时,您可以使用
array.map
对它们进行迭代,以最终获得每个元素的
innerText

const spantext=wait page.$$eval('span',elements=>elements.map(el=>el.innerText))
控制台日志(文本)
在特定的
中,可以使用通用选择器(
*
)在
#id name
span
元素之间创建通配符。您可以阅读更多关于如何创建CSS选择器的内容

const span text=wait page.$$eval('#ctl00_ctl00_ctl00_cphMain_cphmidle_cphCenterColumn_uctDiveInfoDisplay_TabContainer1_tabscuBecoursesViewdiv*span',elements=>elements.map(el=>el.innerText))
控制台日志(文本)

我找到了一种解决方案,可以获取特定的ID,然后在span中获取文本

const spanTexts = await page.$$eval('#ctl00_ctl00_ctl00_cphMain_cphMiddle_cphCenterColumn_uctDiveInfoDisplay_TabContainer1_tabScubeCoursesOffered_ScubaCoursesViewDIV span', elements => elements.map(el => el.innerText))

非常感谢@thedavidbarton

我对Puppeter一无所知,但是看起来,您可以使用document.evaluate,什么允许您使用XPath表达式来查找所需的DOM节点。可以用“已经尝试了一切”的示例更新问题吗?至少是最近的一次尝试。@davidbarton当我说出我的所有意思时说:在DIV ID上使用getElementById,但这不起作用;我以前尝试过$$eval以及您的解决方案,但我没有;我不认为要映射一个范围的内部文本,只需要使用getElementByID和.textContent…大量的解决方案,因为我不确定pupetergreat answer man的语法!这可用于获取每个跨度元素。。。但是,如果我只希望DIV中的SPAN元素具有此id(我可以对SPAN的特定id进行求值……我可以在“引号”中添加哪些内容?:“ctl00\u ctl00\u cphMain\u cphmidle\u cphCenterColumn\u uctDiveInfoDisplay\u TabContainer1\u tabscourses提供\u scubacourseviewdiv”好的,它会破坏“一行程序”因为元素ID很长