CodeGym /Java 课程 /Python SELF ZH /通过 HTML 属性查找元素:id, class

通过 HTML 属性查找元素:id, class

Python SELF ZH
第 35 级 , 课程 3
可用

1. 查找元素的基础

查找元素的方法

在深入代码之前,重要的是先了解如何使用 Selenium 在网页上查找元素。 Selenium 提供了几种方便的方法来查找元素:

  • find_element_by_id():通过元素的唯一标识符 (id) 查找元素。
  • find_element_by_name():通过元素的 name 属性查找元素。
  • find_element_by_class_name():查找具有指定 class 的元素。
  • find_element_by_tag_name():使用标签名查找元素,例如 divpa

让我们从一个简单的例子开始——通过 id 查找一个元素。假设我们丢失了一颗写着“魔法按钮”的按钮,我们需要找到它:

Python

from selenium import webdriver

# 设置驱动程序并打开浏览器
driver = webdriver.Chrome()
driver.get('https://example.com')

# 根据 id 查找元素
magic_button = driver.find_element_by_id('magic_button_id')

# 操作找到的元素(例如,提取文本)
print(magic_button.text)

# 结束会话
driver.quit()

操作找到的元素

找到元素后,接下来就是决定如何操作它。发挥想象力,运用 Selenium 提供的方法,比如用 text 获取元素的文本内容,或者用 get_attribute('attribute_name') 获取元素的某个属性值。

假设我们的元素是一个链接,我们想知道它指向哪里。我们可以这样做:

Python

# 查找带链接的元素
link_element = driver.find_element_by_class_name('link_class')

# 从 href 属性中提取 URL
link_url = link_element.get_attribute('href')
print(f'这个链接指向:{link_url}')

2. 方法 find_element_by_id()

方法 find_element_by_id() 是在网页上搜索元素最快且最可靠的方法之一。 它使用元素的唯一属性 id 进行查找。在 HTML 中,id 是一个唯一标识符,因此可以确保方法返回唯一需要的元素。

使用示例:

Python

element = driver.find_element_by_id("submit-button")

在这个例子中,Selenium 查找 id="submit-button" 的元素并将其存储到 element 变量中。 这种方法特别适合搜索按钮、表单、输入框等页面中不太可能重复的唯一元素。

适用场景?

每当一个元素有唯一的 id 时,都推荐使用 find_element_by_id() , 因为这种方法提供快速且精确的访问。

3. 方法 find_element_by_name()

方法 find_element_by_name() 通过 name 属性查找元素。 它常用于表单和输入框,特别是当元素可能有相同的 class 或 id ,但拥有不同的 name 时。 与 id 不同,name 属性不一定是唯一的,因此页面上可能有多个具有相同 name 的元素。

使用示例:

Python

element = driver.find_element_by_name("username")

此代码查找 name="username" 的元素。通常这是登录表单中用于输入用户名的字段。

适用场景?

如果页面上的元素没有唯一的 id,但有指定的 name 属性,这种方法非常有用。 它对表单输入特别有效,其中元素通常通过 name 进行标识。

4. 方法 find_element_by_class_name()

方法 find_element_by_class_name() 通过类 (class) 查找元素。 它适合用于 CSS,可以找到具有相同样式的元素。需要注意的是,class 可能被分配给多个元素, 因此如果需要查找唯一的元素,务必明确唯一的 class 或使用其他方法。

使用示例:

Python

element = driver.find_element_by_class_name("main-header")

在这个例子中,Selenium 查找第一个带有 class 为 main-header 的元素。

适用场景?

find_element_by_class_name() 常用于查找标题、按钮和其他样式化的元素。 如果元素没有唯一的 idname,这个方法很有帮助, 特别是在需要通过样式定位元素时。

5. 方法 find_element_by_tag_name()

方法 find_element_by_tag_name() 按标签名字查找元素,例如 divpainput。 它适合获取同一类型的所有元素,特别是当页面结构允许按标签轻松导航时。

使用示例:

Python

element = driver.find_element_by_tag_name("h1")

在这里,Selenium 查找第一个 h1 标签的元素,通常用于页面标题。

适用场景?

find_element_by_tag_name() 方法适合查找标题、图片、段落及其他页面中以某种标签呈现的元素。 不过,因为页面上可能有很多同类型的标签,这种方法不一定能精确定位到具体的元素。

6. 注意事项和错误

在我们继续之前,让我们暂停一下,感叹一下 HTML 的多样性。 有时像按钮或图片这样的元素可能没有唯一的 id 或 class。 这种情况下,更复杂的查找方法,例如 XPath 和 CSS 选择器,将会派上用场,我们将在下一讲中探讨。 但如果现在就遇到这样的问题,不要慌张。这只是 Web 自动化世界的一部分乐趣。

选择器的脆弱性

当使用像 idclass 这样的属性时,请记住它们可能会发生变化。 如果选取的元素的 id 突然改变,可能会导致错误。 这是在动态生成页面时特别常见的情况,这种情况下 id 可能是随机生成的。 解决方法?使用更稳定的属性或组合方法。

7. 实践应用

现在我们知道如何通过 id、class 和 name 查找元素了。 这些知识用途广泛,特别是在网页交互自动化方面。 成功找到的元素可以用来填写表单、点击按钮或提取信息——这些操作能显著加快你的工作进程,减少枯燥任务。

想象一下某家公司,员工每天花 10 分钟填写相同的网页表单。 这时 Selenium 就能登场:它可以在几分钟内完成所有这些工作,而你可以悠闲地享用早晨的咖啡。

对于那些感兴趣真实案例的人来说,Selenium 的自动化技术已被广泛应用于测试 Web 应用、监控网站变化, 甚至在你最爱的社交网站上忘记密码时帮助你强力恢复账号(如果算法怀疑你无法辨认熊猫照片中的自己)。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION