如何通过XPATH查找元素(已使用控制台找到)

2024-09-28 23:50:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Edge浏览网页(但Chrome也可以),需要单击一个元素,该元素会删除一个菜单,然后在该菜单上选择一个项目

Python和Selenium在站点上查找按钮时遇到问题。这是一个HTML screenshotconsole entry using the XPATH to find the element.

格式化HTML也会给我带来一些问题,但如果有帮助的话,这里就是:

<div id="ext-comp-1051-targetEl" class="x-box-target" role="presentation" style="width: 995px;"><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1054" style="margin: 0px; right: auto; left: 0px; top: 0px;"><span id="button-1054-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1054-btnEl" class="x-btn-button" role="presentation"><span id="button-1054-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Research</span><span role="presentation" id="button-1054-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1064" style="margin: 0px; right: auto; left: 104px; top: 0px;"><span id="button-1064-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1064-btnEl" class="x-btn-button" role="presentation"><span id="button-1064-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">FOT/ACATS</span><span role="presentation" id="button-1064-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1070" style="margin: 0px; right: auto; left: 226px; top: 0px;"><span id="button-1070-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1070-btnEl" class="x-btn-button" role="presentation"><span id="button-1070-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Financials</span><span role="presentation" id="button-1070-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1080" style="margin: 0px; right: auto; left: 334px; top: 0px;"><span id="button-1080-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1080-btnEl" class="x-btn-button" role="presentation"><span id="button-1080-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Reconciliation</span><span role="presentation" id="button-1080-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1096" style="margin: 0px; right: auto; left: 466px; top: 0px;"><span id="button-1096-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1096-btnEl" class="x-btn-button" role="presentation"><span id="button-1096-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Maintenance</span><span role="presentation" id="button-1096-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1103" style="margin: 0px; right: auto; left: 591px; top: 0px;"><span id="button-1103-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1103-btnEl" class="x-btn-button" role="presentation"><span id="button-1103-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Productivity Tools</span><span role="presentation" id="button-1103-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><a class="x-btn alloy-nav-item x-unselectable x-btn-toolbar x-box-item x-toolbar-item x-btn-plain-toolbar-small x-noicon x-btn-noicon x-btn-plain-toolbar-small-noicon" hidefocus="on" unselectable="on" tabindex="0" id="button-1106" style="margin: 0px; right: auto; left: 744px; top: 0px;"><span id="button-1106-btnWrap" role="presentation" class="x-btn-wrap x-btn-arrow x-btn-arrow-right" unselectable="on"><span id="button-1106-btnEl" class="x-btn-button" role="presentation"><span id="button-1106-btnInnerEl" class="x-btn-inner x-btn-inner-center" unselectable="on">Admin</span><span role="presentation" id="button-1106-btnIconEl" class="x-btn-icon-el  " unselectable="on" style=""></span></span></span></a><div class="x-component x-box-item x-toolbar-item x-component-default" id="tbfill-1053" style="margin: 0px; right: auto; left: 828px; width: 125px; top: 13px;"></div><div class="x-component alloy-icon settings-btn x-box-item x-toolbar-item x-component-default" id="component-1116" style="right: auto; left: 961px; margin: 0px; top: 0px;"><i class=" alloy-icon-cog alloy-icon-lg alloy-icon-over"></i></div></div>

我试着按类、id、XPATH等查找,但根本找不到它。我还尝试使用Selenium的Select和By mods。确认站点上没有iFrame,元素存在(等待),我在SO和其他站点上查看了很多类似的问题

下面是我正在使用的代码(显然是两次单独的尝试):

driver.find_element_by_xpath("//span/div/div/div/div/a[4]")
driver.find_element_by_xpath("//*[@id='button-1080']")

我得到的错误是:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//div/div/span/div/div/div/div/a[4]"}
  (Session info: MicrosoftEdge=91.0.864.41)
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='button-1080']"}
  (Session info: MicrosoftEdge=91.0.864.41)

我有一些问题分享得太多了,因为网站和我的代码是与工作相关的,但我很确定到目前为止的代码是正确的


Tags: rightdividstyleonbuttonpresentationitem
1条回答
网友
1楼 · 发布于 2024-09-28 23:50:24

听起来您需要使用Explicit wait

如果Reconciliation您想要click,我建议使用LINK_TEXTPARTIAL_LINK_TEXT

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT , 'Reconciliation')))
element.click()

导入:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PS:

首先转到开发人员工具(按F12键),然后导航到元素部分并执行CTRL+F,然后在搜索栏中搜索此xpath//span[text()='Reconciliation']。如果只有1个条目,则应该能够继续执行上述代码

相关问题 更多 >