Javascript 在Greasemonkey脚本中,XPath没有在XHTML页面上选择正确的节点
我正在为新浪微博制作一个油腻的脚本。我无法在XHTML页面上选择使用XPath的元素 此代码无法获取我想要的元素:Javascript 在Greasemonkey脚本中,XPath没有在XHTML页面上选择正确的节点,javascript,xpath,xhtml,greasemonkey,weibo,Javascript,Xpath,Xhtml,Greasemonkey,Weibo,我正在为新浪微博制作一个油腻的脚本。我无法在XHTML页面上选择使用XPath的元素 此代码无法获取我想要的元素: function resolver(prefix) { return prefix === 'x' ? 'http://www.w3.org/1999/xhtml' : null; } var allLinks, thisLink; allLinks = document.evaluate( "//x:a[@href]", document, resolve
function resolver(prefix) {
return prefix === 'x' ? 'http://www.w3.org/1999/xhtml' : null;
}
var allLinks, thisLink;
allLinks = document.evaluate(
"//x:a[@href]",
document,
resolver,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null
);
只有。
是否仍然可以选择属性为action type=“login”
的所有元素
我使用了“//x:a[@action type='login']”
,但它不起作用 问题在于,在将所有这些节点添加到页面之前,脚本正在运行。它们稍后由页面的AJAX添加
因此,您可以在脚本中添加一个时间延迟但是:
如果只想获取select元素,几乎不需要使用XPath。改为使用或jQuery。下面是一个基本示例,其中包含querySelectorAll
且没有时间延迟:
var allLinks=document.querySelectorAll(“a[action type='login']”);
if(allLinks.length){
//此处,根据需要处理节点。
}
下面是一个完整的Greasemonkey脚本,它使用jQuery和:
/==UserScript==
//@name(微博,hilite登录链接)
//@包括http://s.weibo.com/weibo/*
//@需要http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
//@需要https://gist.github.com/raw/2625891/waitForKeyElements.js
//@grant GM_addStyle
//==/UserScript==
/*-需要@grant指令来解决设计变更
在GM 1.0中引入。它会恢复沙箱。
*/
函数ProcessLoginLink(jNode){
//*****你的代码在这里*****
jNode.css(“背景”、“石灰”);
}
WaitForkElements(“a[action type='login']”,ProcessLoginLink);
如果你不登录微博,页面就会不同,你得到的只是带有[code]action type=“login”[/code]的元素实际上,我得到了动作类型s的:feed\u list\u item
,feed\u list\u media\u img
,feed\u list\u url
,悬停
,登录
,删除和searchItem
。。。无论如何,我们大多数人都没有也不会登录到那个网站。如果需要登录页面,请将(X)HTML的完整快照保存到,并链接到。。。不管怎样,我的回答应该是有效的,尤其是下半场。嗨,布洛克,谢谢你的帮助,我仍然无法获取元素,但是“延迟内容”的提示非常有用,你能告诉我如何获取延迟内容中的元素吗?我已经阅读了你的推荐页面,我不知道如何使用WaitForkEyelements来实现这一点。谢谢你提供的详细答案,但它不起作用。在检查了目标页面的源代码之后,我发现内容是由脚本动态生成的,也许这就是我无法获取正确元素的原因。你可以在这里参考目标页面的源代码,我能对这种问题做些什么?它是如何“不工作”的?您在Firefox的错误控制台上收到了什么错误消息?您是否安装了我发布的用户脚本(第2项)?我对它进行了测试,它似乎工作得很好——至少在那个测试页面上是这样。