python小小白哟 发表于 2023-8-2 17:48:12

python中selenium中的各种By的用法

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



请大佬们用几个例子讲解一下6种用法,谢谢。

isdkz 发表于 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的不同定位策略来定位和操作页面元素。

学习编程中的Ben 发表于 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种定位方式都是常用的,在实际场景中根据需要选择合适的方式来定位网页元素。请根据你的具体情况和页面结构,选择正确的定位方式来定位元素。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

Mike_python小 发表于 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方法。

希望以上解释对您有所帮助!

python小小白哟 发表于 2023-8-2 17:51:10

Mike_python小 发表于 2023-8-2 17:50
在Selenium中,有多种定位元素的方式,包括以下六种常用的方法:

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

请问Xpath怎么用呢?

歌者文明清理员 发表于 2023-8-2 17:51:47

检测浏览器元素的属性,按照属性匹配标签

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

另外,如果不唯一,selenium 只取第一个元素

歌者文明清理员 发表于 2023-8-2 17:52:11

python小小白哟 发表于 2023-8-2 17:51
请问Xpath怎么用呢?

https://juejin.cn/post/7023338472513486855

Mike_python小 发表于 2023-8-2 17:52:54

python小小白哟 发表于 2023-8-2 14:51
请问Xpath怎么用呢?

在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")# 根据链接文本内容为" 登录"的<a>元素定位


4. 通过元素索引定位元素:

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


5. 通过多个条件组合定位元素:

element = driver.find_element(By.XPATH, "//input[@name='username' and @type='text']")# 根据name属性为"username"且type属性为"text"的<input>元素定位


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


如果回答对你有帮助,记得设置最佳答案

Mike_python小 发表于 2023-8-2 17:53:55

歌者文明清理员 发表于 2023-8-2 14:51
检测浏览器元素的属性,按照属性匹配标签

ID: ID 属性,唯一


https://blog.csdn.net/qishuzdh/article/details/124847147
也可以参考这篇文章

歌者文明清理员 发表于 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/scripts/378351-%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0-csdn%E5%B9%BF%E5%91%8A%E5%AE%8C%E5%85%A8%E8%BF%87%E6%BB%A4-%E4%BA%BA%E6%80%A7%E5%8C%96%E8%84%9A%E6%9C%AC%E4%BC%98%E5%8C%96-%E4%B8%8D%E7%94%A8%E5%86%8D%E7%99%BB%E5%BD%95%E4%BA%86-%E8%AE%A9%E4%BD%A0%E4%BD%93%E9%AA%8C%E4%BB%A4%E4%BA%BA%E6%83%8A%E5%96%9C%E7%9A%84%E5%B4%AD%E6%96%B0csdn

Mike_python小 发表于 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 ...

{:10_256:}试试

Mike_python小 发表于 2023-8-2 17:56:23

歌者文明清理员 发表于 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 ...

下面的帖子推荐也没了 !搜东西有时候帖子推荐有用

歌者文明清理员 发表于 2023-8-2 17:56:42

Mike_python小 发表于 2023-8-2 17:56
下面的帖子推荐也没了 !搜东西有时候帖子推荐有用

???搜索不是 so.csdn.net 吗

Mike_python小 发表于 2023-8-2 17:57:27

歌者文明清理员 发表于 2023-8-2 14:56
???搜索不是 so.csdn.net 吗

我知道,搜完之后文章的下面会自动联想帖子,有时候我查AC代码查不到,下面帖子推荐就有AC代码{:10_256:}

歌者文明清理员 发表于 2023-8-2 17:58:08

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

那么大个按钮你看不见?

Mike_python小 发表于 2023-8-2 17:58:53

歌者文明清理员 发表于 2023-8-2 14:58
那么大个按钮你看不见?

看不见{:10_256:}
页: [1]
查看完整版本: python中selenium中的各种By的用法