当元素不是按钮且在 Selenium 中不可定位时,如何查找在网页中单击了哪个元素? (HTML,硒)[关闭]
Posted
技术标签:
【中文标题】当元素不是按钮且在 Selenium 中不可定位时,如何查找在网页中单击了哪个元素? (HTML,硒)[关闭]【英文标题】:How to find which element is clicked in a webpage when the element is not a button and non-locatable in Selenium? (HTML, Selenium) [closed] 【发布时间】:2022-01-22 01:54:05 【问题描述】:我正在尝试使用 Selenium 和 Python 单击需要登录的希伯来语网站中的按钮。
更新 感谢@cruisepandey 的输入,看来问题出在嵌套 iframe 中的这个元素。
在 Chrome 中使用检查,我找到了“按钮”(它是一个跨度元素):
<span data-columnnum="1" data-ispersonalareaviewable="1" data-
originalmfpriority="1" data- personalareaviewposition="manage_area" data-isrequired="0" name="editOrderBtn" id="editOrderBtn" class="viewCommand
viewSize1 viewCommandGreenBtn" data-defaultvalue="" data-showonload="1"
data- fieldid="9536" data-link="//my.yad2.co.il/newOrder/index.php?
action=edit&CatID=2&SubCatID=1&OrderID=45330517" data-viewcommandactive="1" data- originalelementname="input"> <i class="fa fa-
pencil"></i> <span class="">Edit Details</span> </span>
这个元素在一个 div 中。看不到任何按钮元素。
我试图通过名称、路径等使用 Python 和 Selenium 找到这个元素。我找不到它的任何痕迹。如果我找到它,我希望它可以给我们.click()
,因为它不是一个按钮。
感谢您的帮助。
尝试手动查找:
from selenium import webdriver
session=webdriver.Chrome(r'C:\Users\me\chromedriver')
session.get("https://my.yad2.co.il/newOrder/index.php?action=personalAreaFeed&CatID=2&SubCatID=1") # This is user-password protected and won't be accessible
for x in session.find_elements_by_xpath('//span'):
print(x.get_property('attributes'))
尝试使用名称/id标签:
session.find_elements_by_id('editOrderBtn')
session.find_elements_by_name('editOrderBtn')
这两个命令产生一个空列表。
【问题讨论】:
你能分享你所有的代码吗? 不可定位是什么意思? @Prophet 我将更新(添加 import 和 webdriver 行),但该网站将无法访问,因为它受密码保护(并且是希伯来语)。 @cruisepandey 我的意思是我无法使用 Selenium 找到这个元素,当试图通过 id 或 name 找到它时 - 尽管你可以看到这两个属性存在于span
元素中。跨度>
当您发布 html 时,请花一点时间使用像 beautifytools.com/html-beautifier.php 这样的美化工具,以便阅读。请修正您问题中的 HTML 格式。
【参考方案1】:
如果您想点击Edit Details
您可以使用基于文本的定位器 xpath,如下所示:
//span[text()='Edit Details']
如果我们在HTML DOM
中有唯一条目,请检查dev tools
(谷歌浏览器)。
检查步骤:
Press F12 in Chrome
-> 转到element
部分 -> 做一个CTRL + F
-> 然后粘贴xpath
看看,如果你想要的element
用@ 得到高亮 987654330@匹配节点。
如果它是唯一的,那么有 4 种方法可以使用 Selenium 执行点击它。
代码试用 1:
time.sleep(5)
driver.find_element_by_xpath("//span[text()='Edit Details']").click()
代码试用 2:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Edit Details']"))).click()
代码试用 3:
time.sleep(5)
button = driver.find_element_by_xpath("//span[text()='Edit Details']")
driver.execute_script("arguments[0].click();", button)
代码试用 4:
time.sleep(5)
button = driver.find_element_by_xpath("//span[text()='Edit Details']")
ActionChains(driver).move_to_element(button).click().perform()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
【讨论】:
谢谢,所以在 Chrome 中我能够找到这个独特的 xpath- 它实际上是希伯来语: //span[text()='עריכת פרטים'] 当尝试在 Python 中将其编码为你建议 - 它没有找到。我不知道希伯来语和 Selenium/Python 存在问题。 我不确定Hebrew
,它是什么?另外,it is not found
请分享确切的错误堆栈跟踪。
希伯来语是一种从右到左书写的语言。错误堆栈是:NoSuchElementException:没有这样的元素:无法找到元素:"method":"xpath","selector":"//span[text()="עריכת פרטים"]"(会话信息:chrome =96.0.4664.110)
这个元素可能在 iframe 中。如果是这种情况,它会改变你的答案吗?
是的,如果它在iframe中,那么我们必须先切换到iframe,然后您才能使用上面的代码。但首先您必须先编写代码才能切换到 iframe。使用显式等待wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "iframe XPath here")))
应该可以帮助您绕过这个问题。以上是关于当元素不是按钮且在 Selenium 中不可定位时,如何查找在网页中单击了哪个元素? (HTML,硒)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
python3+selenium百度知道回答问题输入框这个元素定位不到,求方法 解决了肯定高悬赏加采纳?