Javascript 如何使用xpath从用angular编写的网页中提取文本?

Javascript 如何使用xpath从用angular编写的网页中提取文本?,javascript,angularjs,xpath,google-voice,Javascript,Angularjs,Xpath,Google Voice,以前,google voice允许您使用“div”提取短信代码。最近,他们使用AngularJS切换到基于ARIA的框架。如何从网页中提取包含所有sms代码的字符串 以下是我与目标xpath一起使用的命令: var search2 = document.evaluate('//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/d

以前,google voice允许您使用“div”提取短信代码。最近,他们使用AngularJS切换到基于ARIA的框架。如何从网页中提取包含所有sms代码的字符串

以下是我与目标xpath一起使用的命令:

var search2 = document.evaluate('//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/div/gv-text-conversation-item/gv-conversation-item/div/div[2]/ng-transclude/gv-conversation-item-detail/gv-annotation/text()',
  document, null, XPathResult.ANY_TYPE, null);

请看一看。您得到的结果称为节点迭代器。如果像您那样指定
ANY\u类型
,这可能是XPath查询最常见的返回类型。要使代码按原样工作,可以执行以下操作:

// im putting your query in a variable for readability
var query = '//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/div/gv-text-conversation-item/gv-conversation-item/div/div[2]/ng-transclude/gv-conversation-item-detail/gv-annotation/text()';
var search2 = document.evaluate(query, document, null, XPathResult.ANY_TYPE, null);

var thisNode = iterator.iterateNext();

while (thisNode) {
    console.log(thisNode.textContent); // probably will be a text node
    thisNode = iterator.iterateNext();
}   
或者,您可以将结果类型指定为
STRING\u类型
,以简化它

// im putting your query in a variable for readability
var query = '//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/div/gv-text-conversation-item/gv-conversation-item/div/div[2]/ng-transclude/gv-conversation-item-detail/gv-annotation/text()';
var search2 = document.evaluate(query, document, null, XPathResult.STRING_TYPE, null);

console.log(search2.stringValue);
请看下面的图片。您得到的结果称为节点迭代器。如果像您那样指定
ANY\u类型
,这可能是XPath查询最常见的返回类型。要使代码按原样工作,可以执行以下操作:

// im putting your query in a variable for readability
var query = '//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/div/gv-text-conversation-item/gv-conversation-item/div/div[2]/ng-transclude/gv-conversation-item-detail/gv-annotation/text()';
var search2 = document.evaluate(query, document, null, XPathResult.ANY_TYPE, null);

var thisNode = iterator.iterateNext();

while (thisNode) {
    console.log(thisNode.textContent); // probably will be a text node
    thisNode = iterator.iterateNext();
}   
或者,您可以将结果类型指定为
STRING\u类型
,以简化它

// im putting your query in a variable for readability
var query = '//*[@id="messaging-view"]/div/md-content/div/gv-conversation-list/md-virtual-repeat-container/div/div[2]/div[1]/div/gv-text-conversation-item/gv-conversation-item/div/div[2]/ng-transclude/gv-conversation-item-detail/gv-annotation/text()';
var search2 = document.evaluate(query, document, null, XPathResult.STRING_TYPE, null);

console.log(search2.stringValue);

当我在控制台中查看xpathresult时,它会显示“stringValue:[异常:TypeError:未能从'xpathresult'读取'stringValue'属性:结果类型不是字符串。在xpathresult.remoteFunction(:2:14)]”当我在控制台中查看xpathresult时,它会显示“stringValue:[异常:TypeError:未能从'XPathResult'读取'stringValue'属性:结果类型不是字符串。在XPathResult.remoteFunction(:2:14)]”