Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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 在Greasemonkey脚本中,XPath没有在XHTML页面上选择正确的节点_Javascript_Xpath_Xhtml_Greasemonkey_Weibo - Fatal编程技术网

Javascript 在Greasemonkey脚本中,XPath没有在XHTML页面上选择正确的节点

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

我正在为新浪微博制作一个油腻的脚本。我无法在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, 
  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项)?我对它进行了测试,它似乎工作得很好——至少在那个测试页面上是这样。