即使直接从 Chrome inspect 复制,XPath 也不起作用

XPath is not working even when directly copied from Chrome inspect

我一直在尝试自动化我的工作,我们使用 service-now 来处理我们的请求。但是,对于我的生活,我无法在 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>

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

第二个 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" )]

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

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

注意:- 如果您从 Firefox 复制 XPath,它主要为您提供绝对 XPath,而 chrome 在另一侧将提供相对

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

我希望这个锻炼适合你。如果您可以分享 link 或检查显示完整 DOM 的元素快照,我可以更好地帮助您。谢谢:-)

感谢您的所有回答。原来我需要做的就是切换 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' )]")

成功了。