我一直在尝试使我的工作自动化,并且我们使用service-now来处理我们的请求。但是,对于我一生来说,我无法让Selenium在及时服务的网站上正常运行。在进入之前,它可以在登录页面上使用,但是无论我使用哪种形式的定位器或x路径都无法使用。该网站是动态的,所以我很确定需要xpath。
我直接从Google Chrome浏览器进行了检查,并尝试了其他xpath可能性:
//*[@id="row_sc_request.sc_task.request_65091fb5db8163c4bc8f18df4b961921"]/td[3]/a
xpath=//a[starts-with(text(),'Open record: SCTA')]
xpath=//a[class="linked formlink" and starts-with(@aria-label='Open record: SCTA')]
这是从chrome复制的元素
<a class="linked formlink" aria-label="Open record: SCTASK0067185" href="sc\\\_task.do?sys\\\_id=65091fb5db8163c4bc8f18df4b961921\\\&sysparm\\\_record\\\_target=sc\\\_task\\\&sysparm\\\_record\\\_row=1\\\&sysparm\\\_record\\\_rows=1\\\&sysparm\\\_record\\\_list=request%3D9509dbb5db8163c4bc8f18df4b96199f%5EORDERBYDESCnumber">SCTASK0067185</a>
有人可以查看我的代码吗?任何帮助将不胜感激!
答案 0 :(得分:0)
第二个xpath中有一个语法错误,即-xpath=//a[class="linked formlink" and starts-with(aria-label='SCTA')]
。
在xpath中,属性必须以“ @”字符为前缀;和starts-with()
接受两个参数,而不是布尔值。因此必须是:
xpath=//a[@class="linked formlink" and starts-with(@aria-label, "SCTA" )]
我不确定它是否会匹配(根据示例,应该匹配),但是会更接近您。
答案 1 :(得分:0)
我建议使用绝对XPath,我想下面的注释会有所帮助
注意:-如果您从Firefox复制XPath,则大多数情况下它会为您提供绝对的XPath,而另一面的chrome将为您提供相对的
或另一种方法是使用DOM树中的另一个稳定元素创建XPath
我希望这个锻炼对您有用。如果您可以共享链接或检查显示完整DOM的元素快照,我可以为您提供更好的帮助。谢谢:-)
答案 2 :(得分:0)
感谢您的所有回答。事实证明,我要做的就是切换IFrame。 我对此很陌生,所以我不知道。
在我的情景中,我不得不写:
"browser.switch_to.frame(browser.find_element_by_name('gsft_main'))"
其中gsft_main是框架的名称。
完成此操作后,我便可以使用:
browser.find_element_by_xpath("//a[@class='linked formlink' and starts-with(@aria-label, 'Open record: SCTA' )]")
结果就解决了。