Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/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
Java 无法使用XPath标识页面上的所有文本元素_Java_Html_Selenium_Xpath_Web Scraping - Fatal编程技术网

Java 无法使用XPath标识页面上的所有文本元素

Java 无法使用XPath标识页面上的所有文本元素,java,html,selenium,xpath,web-scraping,Java,Html,Selenium,Xpath,Web Scraping,我试图识别网页上的所有文本元素。根据我在stackoverflow上读到的几个线程,我提出了以下XPath: //*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//. //*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//text() 然而,我注意到,虽然这在Amazon产品页面上标识了数百个文本元素,但

我试图识别网页上的所有文本元素。根据我在stackoverflow上读到的几个线程,我提出了以下XPath:

//*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//.
//*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//text()
然而,我注意到,虽然这在Amazon产品页面上标识了数百个文本元素,但却遗漏了一些重要的元素

例如:

在第页,我无法识别“功能”部分和“按时间顺序”部分:

“Echo Show带给你关于Alexa的一切你爱的东西”

“明天就要……”

在第页,我无法识别描述部分(紧靠产品图像右侧)

这两个页面都有突出显示在页面上的文本,因此我不明白为什么没有相应地识别它们

我知道其中一些文本在
ul/li
标签下,但我认为这不是问题所在

最后,是否可以将所述XPath与另一个属性值组合,以便它仅识别具有给定属性值的文本元素(即,
/*[normalize space(.)=.][非(self::script或self::style或self::meta)]/.
+
/*[@id='XYZ']

谢谢

尝试使用:

//*[text()[not(normalize-space()='')]]


这将选择任何具有text()节点的元素作为直接子元素,而不仅仅是空格。

可能是因为:
[规范化空格(.)=.]
尝试删除该谓词。我认为您还需要在另一个谓词中使用
而不是
。例如(未测试):
/*[非(self::script)而不是(self::style)和不是(self::meta)//text()
同样,不清楚“文本元素”是什么意思。你想选择文本节点还是选择包含文本的元素?@DanielHaley如果我删除
[规范化空间(.)=。]
它标识了数百个我不想要的空白元素。所谓文本元素,我指的是任何在页面上有可见文本的元素。基本上,就是你自己查看页面时可能看到的文本类型。谢谢!也许可以尝试
/*[text()[not(normalize-space()='')]
。这样应该选择任何有文本()的元素节点作为不只是空白的直接子节点。请尝试
//*[text()[not(normalize-space()='')][not(self::script或self::style或self::meta或self::noscript)]
或尝试
//*[not(normalize space(text())=''][not not(self::script或self::style或self::meta或self::noscript)]