JavaScript:XPATH将ID属性注入<input />标记

时间:2016-12-15 17:57:16

标签: javascript xpath javascript-injection

我正在尝试使用selenium自动化一些东西,问题是标签没有ID,所以我找到了使用xpath和JS的控件:

document.evaluate('/ HTML /体/报头[2] / DIV [2] / DIV / DIV [1] / DIV [1] / DIV / DIV / DIV /形式/字段集/ DIV [1] / input',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue

这是Chrome控制台的响应:

<input> type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden"></input>

这意味着它通过xpath找到了我的控件,现在我想注入一个ID,以便我可以从selenium中引用它。

我试着这样做:

document.evaluate('/html/body/header[2]/div[2]/div/div[1]/div[1]/div/div/div/form/fieldset/div[1]/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML='input id="UploadedFileFilter" type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden">'

基本上用其中的ID重写整个标记,然后控制台响应这个答案:

input id="UploadedFileFilter" type="file" data-autosubmitoff="true" accept=".xls,.csv,.xlsx" name="File" class="hidden">"

PERFECT!但是当我查看DOM时,输入标签仍然是旧标签,我出错了什么?

感谢。

1 个答案:

答案 0 :(得分:2)

不要直接编辑HTML,而是像这样设置id值:

var path = '/html/body/header[2]/div[2]/div/div[1]/div[1]/div/div/div/form/fieldset/div[1]/input';
var element = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.id = 'UploadedFileFilter';

还值得注意的是innerHTML是元素中包含的HTML。要编辑元素本身的HTML,您可以使用outerHTML