XPath 即使直接从 Chrome 检查复制也无法正常工作



我一直在尝试自动化我的工作,我们使用service-now来满足我们的请求。但是,对于我的生活,我无法让Selenium在现在的服务网站上正常运行。它在进入之前在登录页面上工作,但无论我使用哪种形式的定位器或 x 路径,它都不起作用。该网站是动态的,所以我非常确定需要xpath。

我已经直接从谷歌浏览器检查以及其他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')]

这是从铬复制的元素

<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>

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

我建议使用绝对 XPath,我想下面的注释会有所帮助

注意:- 如果你从 Firefox 复制 XPath,它主要会给你绝对的 XPath,而另一侧的 chrome 会给你相对的

或者另一种方法是使用 DOM 树中的另一个稳定元素制作 XPath

我希望这个锻炼对你有用。 如果您可以共享链接或检查显示完整 DOM 的元素快照,我可以为您提供更好的帮助。谢谢 :-(

第二个

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" )]

我不确定这是否会使其匹配(根据样本,它应该如此(,但会让你更接近。

谢谢你的所有回答。事实证明,我需要做的就是切换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' )]")

它成功了。

解决方案可能是从绝对 xpath(您在浏览器的开发人员工具中找到的路径:复制>复制 XPath(切换到相对路径。为此,您可以安装像SelectorsHub这样的扩展并查找"Rel XPath">

在一个特定的例子中,我发现绝对的xpath根本不起作用。

相关内容

  • 没有找到相关文章

最新更新