即使直接从Chrome检查中直接复制,XPath也无法运行

时间:2019-07-26 03:08:37

标签: python python-3.x selenium xpath selenium-chromedriver

我一直在尝试使我的工作自动化,并且我们使用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\\\&amp;sysparm\\\_record\\\_target=sc\\\_task\\\&amp;sysparm\\\_record\\\_row=1\\\&amp;sysparm\\\_record\\\_rows=1\\\&amp;sysparm\\\_record\\\_list=request%3D9509dbb5db8163c4bc8f18df4b96199f%5EORDERBYDESCnumber">SCTASK0067185</a>

有人可以查看我的代码吗?任何帮助将不胜感激!

3 个答案:

答案 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' )]")

结果就解决了。