我正在尝试使用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时,输入标签仍然是旧标签,我出错了什么?
感谢。
答案 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
。