selenium 如何定位登陆图标按钮,如果圈中的第一个图标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium 如何定位登陆图标按钮,如果圈中的第一个图标相关的知识,希望对你有一定的参考价值。

可以通过id或者name定位(如果元素有id或者name的前提下),像这个元素没有,所以要通过xpath方式定位,xpath的获取方式有几种,如果是谷歌浏览器,直接选择元素右击copy~xpath,火狐浏览器的话可以安装一个firepath插件轻松搞定 参考技术A 一般登录按钮都有唯一的id,用driver.find_element_by_id()一般登录按钮都有唯一的id,用()driver.find_element_by_iddriver.find_element_by_id

当元素不是按钮且在 Selenium 中不可定位时,如何查找在网页中单击了哪个元素? (HTML,硒)[关闭]

【中文标题】当元素不是按钮且在 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&amp;CatID=2&amp;SubCatID=1&amp;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 如何定位登陆图标按钮,如果圈中的第一个图标的主要内容,如果未能解决你的问题,请参考以下文章

pathon selenium爬虫里面如何定位一个button元素?

python+selenium实现163邮箱自动登陆

当元素不是按钮且在 Selenium 中不可定位时,如何查找在网页中单击了哪个元素? (HTML,硒)[关闭]

selenium弹框元素定位-冻结界面

Python+Selenium笔记:元素定位

如何使用 selenium (Python) 定位 Instagram 关注按钮