即使直接从 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\\&sysparm\\_record\\_target=sc\\_task\\&sysparm\\_record\\_row=1\\&sysparm\\_record\\_rows=1\\&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' )]")
成功了。
我一直在尝试自动化我的工作,我们使用 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\\&sysparm\\_record\\_target=sc\\_task\\&sysparm\\_record\\_row=1\\&sysparm\\_record\\_rows=1\\&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' )]")
成功了。