鱼C论坛

 找回密码
 立即注册
查看: 2340|回复: 15

[已解决]python中selenium中的各种By的用法

[复制链接]
发表于 2023-8-2 17:48:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下图所示,6种用法能否详细讲解一下呢?我用了CLASS_NAME是否获取的是类名字呢?

微信截图_20230802174337.jpg

请大佬们用几个例子讲解一下6种用法,谢谢。
最佳答案
2023-8-2 17:52:54

在Python的Selenium库中,By.Xpath 是一种定位元素的方式,根据XPath表达式来查找匹配的元素。下面是一些常见的 By.Xpath 的用法:

1. 通过元素标签名定位元素:
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
element = driver.find_element(By.XPATH, "//div")  # 根据<div>标签查找元素

2. 通过元素属性定位元素:
element = driver.find_element(By.XPATH, "//input[@id='username']")  # 根据id属性定位<input>元素

3. 通过元素文本内容定位元素:
element = driver.find_element(By.XPATH, "//a[text()='登录']")  # 根据链接文本内容为" 登录"的<a>元素定位

4. 通过元素索引定位元素:
elements = driver.find_elements(By.XPATH, "//div[@class='item']")  # 根据class属性为"item"的<div>元素列表
element = elements[0]  # 获取第一个匹配的元素

5. 通过多个条件组合定位元素:
element = driver.find_element(By.XPATH, "//input[@name='username' and @type='text']")  # 根据name属性为"username"且type属性为"text"的<input>元素定位

这些只是一些常见的 By.Xpath 的用法示例。XPath表达式语法非常灵活,您可以根据具体的需求进行更复杂的定位操作。此外,还有其他的定位方式,如 By.IDBy.ClassNameBy.Name 等,您可以根据需要选择合适的定位方式。


如果回答对你有帮助,记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-2 17:48:33 | 显示全部楼层
当使用Selenium库在Python中进行Web自动化时,可以使用不同的定位策略来定位页面上的元素。这些定位策略是通过 By 类来表示的。下面详细介绍一下这6种定位策略的用法:

1.  By.ID :通过元素的唯一标识符(id属性)来定位元素。
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# 通过ID定位元素
element = driver.find_element(By.ID, 'element_id')

2.  By.NAME :通过元素的名称(name属性)来定位元素。
# 通过名称定位元素
element = driver.find_element(By.NAME, 'element_name')

3.  By.CLASS_NAME :通过元素的类名(class属性)来定位元素。
# 通过类名定位元素
element = driver.find_element(By.CLASS_NAME, 'element_class')

4.  By.TAG_NAME :通过元素的标签名来定位元素。
# 通过标签名定位元素
element = driver.find_element(By.TAG_NAME, 'element_tag')

5.  By.LINK_TEXT :通过链接文本(\<a>标签中的文本内容)来定位链接元素。
# 通过链接文本定位元素
element = driver.find_element(By.LINK_TEXT, 'Link Text')

6.  By.PARTIAL_LINK_TEXT :通过部分链接文本来定位链接元素。
# 通过部分链接文本定位元素
element = driver.find_element(By.PARTIAL_LINK_TEXT, 'Partial Link')

需要注意的是,使用 find_element() 方法可以找到页面上第一个匹配的元素。如果要找到多个匹配的元素,可以使用 find_elements() 方法,并将返回的元素列表进行遍历。

另外, CLASS_NAME 用于定位元素的类名,而不是获取类名。如果要获取元素的类名,可以使用以下方式:
element = driver.find_element(By.CLASS_NAME, 'element_class')
class_name = element.get_attribute('class')

希望这些例子能够帮助您理解如何使用Selenium的不同定位策略来定位和操作页面元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:48:43 | 显示全部楼层
请注意,由于当前是文字环境无法显示图片,所以我无法直接参考你提到的下图。但我可以针对常见的 Selenium 中的定位方式进行解释和举例,希望对你有所帮助。

在 Selenium 中,可以使用多种方式来定位网页元素。以下是常用的6种定位方式的讲解:

1. By.ID: 使用元素的唯一标识符(id属性)来定位元素。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.ID, "element_id")   
   这里的 "element_id" 是待定位元素的 id 属性值。

2. By.NAME: 使用元素的 name 属性来定位元素。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.NAME, "element_name")   
   这里的 "element_name" 是待定位元素的 name 属性值。

3. By.CLASS_NAME: 使用元素的 class 属性来定位元素。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.CLASS_NAME, "element_class")   
   这里的 "element_class" 是待定位元素的 class 属性值。注意,该定位方式实际上是使用 CSS 类名进行定位,而不是获取类的名称。

4. By.TAG_NAME: 使用元素的标签名来定位元素。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.TAG_NAME, "element_tag")   
   这里的 "element_tag" 是待定位元素的标签名,例如 "div""input" 等。

5. By.LINK_TEXT: 使用链接文本来定位链接元素(<a> 标签)。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.LINK_TEXT, "link_text")   
   这里的 "link_text" 是链接的文本内容,例如 "Click here"

6. By.PARTIAL_LINK_TEXT: 使用链接的部分文本来定位链接元素。示例代码:

   from selenium import webdriver   from selenium.webdriver.common.by import By   driver = webdriver.Chrome()   element = driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")   
   这里的 "partial_link_text" 是链接文本的一部分内容,例如 "Click"

以上6种定位方式都是常用的,在实际场景中根据需要选择合适的方式来定位网页元素。请根据你的具体情况和页面结构,选择正确的定位方式来定位元素。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:50:07 | 显示全部楼层
在Selenium中,有多种定位元素的方式,包括以下六种常用的方法:

1. By.ID:通过元素的id属性进行定位。例如:
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com")

element = driver.find_element(By.ID, "myElementId")

2. By.NAME:通过元素的name属性进行定位。例如:
element = driver.find_element(By.NAME, "myElementName")

3. By.CLASS_NAME:通过元素的class属性进行定位。请注意,这里传入的是类名,而不是类的描述符。例如:
element = driver.find_element(By.CLASS_NAME, "myClassName")

4. By.TAG_NAME:通过元素的标签名进行定位。例如:
element = driver.find_element(By.TAG_NAME, "input")

5. By.LINK_TEXT:通过链接文本进行定位。例如:
element = driver.find_element(By.LINK_TEXT, "Click here")

6. By.PARTIAL_LINK_TEXT:通过链接文本的部分内容进行定位。例如:
element = driver.find_element(By.PARTIAL_LINK_TEXT, "here")

需要注意的是,这些方法都是从By类中获取的。使用这些方法时, 需要导入By类。

至于您提到的CLASS_NAME,它是用于通过元素的class属性进行定位的方法之一。当通过By.CLASS_NAME进行定位时,传入的是类名而不是描述符。如果您要根据类名进行定位,可以使用By.CLASS_NAME方法。

希望以上解释对您有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 17:51:10 | 显示全部楼层
Mike_python小 发表于 2023-8-2 17:50
在Selenium中,有多种定位元素的方式,包括以下六种常用的方法:

1. By.ID:通过元素的id属性进行定位。 ...

请问Xpath怎么用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:51:47 | 显示全部楼层
检测浏览器元素的属性,按照属性匹配标签

ID: ID 属性,唯一
NAME:NAME  属性,不唯一
CLASS_NAME: CLASS 属性,不唯一
XPATH: XPath,不唯一
CSS_SELECTOR: CSS 选择器,不唯一
LINK_TEXT: 链接文字,如“互助平台”

另外,如果不唯一,selenium 只取第一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:52:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:52:54 | 显示全部楼层    本楼为最佳答案   

在Python的Selenium库中,By.Xpath 是一种定位元素的方式,根据XPath表达式来查找匹配的元素。下面是一些常见的 By.Xpath 的用法:

1. 通过元素标签名定位元素:
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
element = driver.find_element(By.XPATH, "//div")  # 根据<div>标签查找元素

2. 通过元素属性定位元素:
element = driver.find_element(By.XPATH, "//input[@id='username']")  # 根据id属性定位<input>元素

3. 通过元素文本内容定位元素:
element = driver.find_element(By.XPATH, "//a[text()='登录']")  # 根据链接文本内容为" 登录"的<a>元素定位

4. 通过元素索引定位元素:
elements = driver.find_elements(By.XPATH, "//div[@class='item']")  # 根据class属性为"item"的<div>元素列表
element = elements[0]  # 获取第一个匹配的元素

5. 通过多个条件组合定位元素:
element = driver.find_element(By.XPATH, "//input[@name='username' and @type='text']")  # 根据name属性为"username"且type属性为"text"的<input>元素定位

这些只是一些常见的 By.Xpath 的用法示例。XPath表达式语法非常灵活,您可以根据具体的需求进行更复杂的定位操作。此外,还有其他的定位方式,如 By.IDBy.ClassNameBy.Name 等,您可以根据需要选择合适的定位方式。


如果回答对你有帮助,记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:53:55 | 显示全部楼层
歌者文明清理员 发表于 2023-8-2 14:51
检测浏览器元素的属性,按照属性匹配标签

ID: ID 属性,唯一

https://blog.csdn.net/qishuzdh/article/details/124847147
也可以参考这篇文章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:54:46 | 显示全部楼层
Mike_python小 发表于 2023-8-2 17:53
https://blog.csdn.net/qishuzdh/article/details/124847147
也可以参考这篇文章

csdn优化脚本:https://greasyfork.org/zh-CN/scr ... %B4%AD%E6%96%B0csdn
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:55:38 | 显示全部楼层
歌者文明清理员 发表于 2023-8-2 14:54
csdn优化脚本:https://greasyfork.org/zh-CN/scripts/378351-%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0-csdn ...

试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:56:23 | 显示全部楼层


下面的帖子推荐也没了 !搜东西有时候帖子推荐有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:56:42 | 显示全部楼层
Mike_python小 发表于 2023-8-2 17:56
下面的帖子推荐也没了 !搜东西有时候帖子推荐有用


???搜索不是 so.csdn.net 吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:57:27 | 显示全部楼层
歌者文明清理员 发表于 2023-8-2 14:56
???搜索不是 so.csdn.net 吗

我知道,搜完之后文章的下面会自动联想帖子,有时候我查AC代码查不到,下面帖子推荐就有AC代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:58:08 | 显示全部楼层
Mike_python小 发表于 2023-8-2 17:57
我知道,搜完之后文章的下面会自动联想帖子,有时候我查AC代码查不到,下面帖子推荐就有AC代码

那么大个按钮你看不见?

Snipaste_2023-08-02_17-57-45.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 17:58:53 | 显示全部楼层
歌者文明清理员 发表于 2023-8-2 14:58
那么大个按钮你看不见?

看不见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 21:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表