标签: document.evaluate

有没有办法在Selenium WebDriver中使用JavaScript通过XPath获取元素?

我正在寻找类似的东西:

getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
Run Code Online (Sandbox Code Playgroud)

我需要使用JS获取元素的innerHTML(在Selenium WebDriver/Java中使用它,因为WebDriver本身无法找到它),但是如何?

我可以使用ID属性,但并非所有元素都具有ID属性.

[固定]

我正在使用jsoup在Java中完成它.这符合我的需要.

javascript xpath selenium-webdriver document.evaluate

218
推荐指数
7
解决办法
27万
查看次数

document.evaluate - 跨浏览器?

我一直在寻找除Sizzle之外的CSS选择器功能,我遇到过这个功能.

function SparkEn(xpath,root) {
  xpath = xpath
    .replace(/((^|\|)\s*)([^/|\s]+)/g,'$2.//$3')
    .replace(/\.([\w-]+)(?!([^\]]*]))/g, '[@class="$1" or @class$=" $1" or @class^="$1 " or @class~=" $1 "]')
    .replace(/#([\w-]+)/g, '[@id="$1"]')
    .replace(/\/\[/g,'/*[');
  str = '(@\\w+|"[^"]*"|\'[^\']*\')';
  xpath = xpath
    .replace(new RegExp(str+'\\s*~=\\s*'+str,'g'), 'contains($1,$2)')
    .replace(new RegExp(str+'\\s*\\^=\\s*'+str,'g'), 'starts-with($1,$2)')
    .replace(new RegExp(str+'\\s*\\$=\\s*'+str,'g'), 'substring($1,string-length($1)-string-length($2)+1)=$2');
  var got = document.evaluate(xpath, root||document, null, 5, null);
  var result=[];
  while (next = got.iterateNext())
    result.push(next);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

我觉得它真好太好了,这只是一个firefox功能(xpath?)还是慢?基本上为什么我会使用Sizzle呢?

javascript internet-explorer dom cross-browser document.evaluate

14
推荐指数
1
解决办法
7454
查看次数

带有dom文档的xpath

我正在尝试使用xpath查询查找xml节点.但我不能让它工作.在Firefox中,结果总是"未定义",并且chrome会抛出错误代码.

<script type="text/javascript">

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');

var result = doc.evaluate('/form/name', doc, 
                          null, XPathResult.ANY_TYPE, null);

alert(result.stringValue);

</script>
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

javascript xml xpath dom document.evaluate

10
推荐指数
1
解决办法
1万
查看次数

document.evaluate 不返回正确的 TextNodes XPath

我正在 WebView 中为 Android 创建“荧光笔”。我通过如下函数获取 HTML 中所选范围的 XPath 表达式

/HTML[1]/BODY[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]/text()[5]

现在我正在通过javascript中的这个函数评估上面的XPath表达式

var resNode = document.evaluate('/HTML[1]/BODY[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]/text()[5]',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE ,null);
var startNode = resNode.singleNodeValue;
Run Code Online (Sandbox Code Playgroud)

但我得到了 startNode 'null'。

但是,这里有一个有趣的点:

如果我 使用相同的函数评估这个'/HTML[1]/BODY[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]' XPath 表达式,它会给出正确的节点,即'div'。

两个 XPath 之间的区别在于,之前的 XPath 包含一个 textNode,之后只包含 div。

但同样的事情在桌面浏览器上运行良好。

编辑的 示例 HTML

<html>
<head>
<script></script>
</head>
<body>
<div id="mainpage" class="highlighter-context">
<div>       Some text here also....... </div>
<div>      Some text here also.........</div>
<div>
  <h1 class="heading"></h1>
  <div class="left_side">
    <ol></ol>
    <h1></h1>
    <div class="text_bio">
    In human beings, height, colour of eyes, complexion, chin, etc. are 
    some …
Run Code Online (Sandbox Code Playgroud)

xpath android webview document.evaluate

5
推荐指数
1
解决办法
1427
查看次数

使用 XPath 在 DOM 中搜索多个相同字符串

我正在编写一个 Chrome 扩展程序,它将搜索 DOM 并突出显示页面上的所有电子邮件地址。我发现这是为了查找页面上的符号,但它只在有一个电子邮件地址时正确返回,当找到多个地址时它会中断。

found = document.evaluate('//*[contains(text(),"@")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
Run Code Online (Sandbox Code Playgroud)

如果找到多个返回倍数,正确的方法是什么?

javascript xpath dom document.evaluate

5
推荐指数
1
解决办法
1026
查看次数

(document.evaluate) - > src的图像包含多个条件,如何?

请不要用仇恨棒打我.我是个菜鸟.隐藏在角落里

我是Greasemonkey及其语法的新手,所以非常感谢您的帮助!

我试图根据他们的src url中包含的单词突出显示几个图像但是如果src不是完整匹配,我无法找出多个条件的正确语法.

var snapImages =document.evaluate("//img[contains(@src, 'car']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);


for (var i = snapImages.snapshotLength - 1; i >= 0; i--) {
        var elmImage = snapImages.snapshotItem(i);

    elmImage.style.MozOutline = "5px solid red";
    }
Run Code Online (Sandbox Code Playgroud)

这个例子有效,但我还需要几个条件.喜欢(@src,'bike'),(@ src,'bus')等.再次,我为新问题道歉.什么是正确的语法?

非常感谢你!

-Rocki

javascript xpath greasemonkey document.evaluate

4
推荐指数
1
解决办法
1365
查看次数

使用document.evaluate时,未定义XPath元素/对象

如何修复常规JavaScript代码,使其不会显示"未定义"并显示输入字段的值?jQuery代码工作正常,并在同一页面上正确显示输入字段值.

常规JavaScript:

var obj = document.evaluate('//html/body/form/div[4]/label/input',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null); 

alert(obj.value);
Run Code Online (Sandbox Code Playgroud)

JQuery 1.7.1代码:

var obj = $('html > body > form > div:nth-child(4) > label > input');

alert(obj.value);
Run Code Online (Sandbox Code Playgroud)

javascript jquery xpath jquery-selectors document.evaluate

4
推荐指数
1
解决办法
3686
查看次数

使用document.evaluate()提取<svg>元素?

我试图用来document.evaluate()从元素中提取某些子元素<svg>.但是我只是通过提取<svg>自己来解决问题.我可以提取所有内容<svg>,但不能再提取.例如,这很有效:

document.evaluate('//*[@id="chart"]/div/div[1]/div', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue)
Run Code Online (Sandbox Code Playgroud)

这给了我(缩短):

<div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;" aria-label="Et diagram.">
    <svg width="600" height="400" aria-label="Et diagram." style="overflow: hidden;"></svg>
    <div aria-label="En repræsentation i tabelformat af dataene i diagrammet." style="position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后我会假设这很简单

//*[@id="chart"]/div/div[1]/div/svg
Run Code Online (Sandbox Code Playgroud)

会给我<svg>- 但没有任何作用.尝试了所有回复类型:

for (var type=XPathResult.ANY_TYPE; type<XPathResult.FIRST_ORDERED_NODE_TYPE+1; type ++) {
   console.dir(
      document.evaluate('//*[@id="chart"]/div/div[1]/div/svg', document, null, type, null)
   );   
}    
Run Code Online (Sandbox Code Playgroud)

我得到invalidIteratorState …

javascript xpath svg dom-manipulation document.evaluate

4
推荐指数
1
解决办法
669
查看次数

document.evaluate无法在Chrome中运行?

我有以下......

 var result = doc.evaluate("//input[@class=\"form_field_as as-input\"]", 
                           context, 
                           null, 
                           XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
                           null);
    for(var i = 0; i < result.snapshotLength; i++) {
    a[i] = result.snapshotItem(i);
}
return a;
Run Code Online (Sandbox Code Playgroud)

我正在评估的表达式来自输入.代码在FireFox中工作正常,但是当我在Chrome上测试时,它不会返回任何内容.我究竟做错了什么?

我正在评估的输入是......

<input type="text" id="sharees" class="form_field_as">
Run Code Online (Sandbox Code Playgroud)

javascript xpath dom google-chrome document.evaluate

2
推荐指数
1
解决办法
5392
查看次数