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
XPath查找没有';不要在幻影中工作_Xpath_Phantomjs - Fatal编程技术网

XPath查找没有';不要在幻影中工作

XPath查找没有';不要在幻影中工作,xpath,phantomjs,Xpath,Phantomjs,我正在尝试让XPath使用PhantomJS 1.9.2: var getElementsByXPath = function(xPath) { return document.evaluate( xPath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); }; var root = getElementsByXPath("//div").iterateNext(); 这将在页面加载时执行,并始终返回n

我正在尝试让XPath使用PhantomJS 1.9.2:

var getElementsByXPath = function(xPath) {
  return document.evaluate(
    xPath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
};
var root = getElementsByXPath("//div").iterateNext();
这将在页面加载时执行,并始终返回null,而querySelector似乎工作正常:

var divs = page.evaluate(function(s) {
  return document.querySelector(s);
}, 'div');

我在这个特定的XPath evaluate示例中遗漏了什么吗?

我终于发现call document.evaluate必须包含一个page.evaluate调用,如下所示:

page.evaluate(function() {
    document.evaluate(
        '//div',
        document,
        null,
        XPathResult.ORDERED_NODE_ITERATOR_TYPE,
        null);
});

如果希望使用phantomjs获取特定xpath的html内容…-)


文档具有哪种MIME类型?它是否使用名称空间,例如
?例如,我在google.com和许多其他网站上试用过。相同的结果。MIME类型会影响WebKit中的XPath实现吗?PhantomJS网站说它对DOM处理、CSS选择器、JSON、画布和SVG有本机支持。这是否意味着它没有内置的XPath功能?我不熟悉PhantomJS,我的评论只是试图指出在HTML上使用XPath时的常见注意事项,比如名称空间和应用程序/xml与文本/HTML。如果使用
/*
作为路径会发生什么情况?//*返回[object HTMLHtmlElement]。当我尝试迭代其子节点时,它返回[object HTMLHeadElement]和[object HTMLBodyElement],这两个节点都没有子节点。看来是这样。我还发现,完全相同的代码在Chrome本身也能正常工作。
var xpath= '//*[@id="2b"]';
var address= 'www.mywebadress.com';
page.open(address, function(status) {
      setTimeout(grabHtml, 2500);
    });

function grabHtml() {

var html = page.evaluate(function(xpath) {

    if (document.evaluate) { 
        var xPathRes = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
        if (xPathRes.singleNodeValue) {
            var c = html.singleNodeValue.innerHTML;
        } else if (xPathRes) {
            var c = "No content found!";
        }
    } else {
        var c = "does not support the evaluate method!";
    }
    return c;
}, xpath);

console.log(html);