CodeGym /Java 课程 /Python SELF ZH /创建函数来查找和与网页上的元素交互

创建函数来查找和与网页上的元素交互

Python SELF ZH
第 37 级 , 课程 2
可用

1. 页面元素查找基础

使用元素查找方法

当你开始在实际项目中用Selenium时,首先要完成的任务之一就是查找页面上的元素。这可以类比成在酒店里找电梯按钮:你得知道按钮在哪儿才能按它,然后去你想去的楼层。

Selenium 提供了多种方法来查找元素。根据你的喜好,你可以用 find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector,等等。回顾一下你已经知道的内容,然后写个简单的例子:

Python

from selenium import webdriver

# 创建浏览器实例(这里用Chrome)
driver = webdriver.Chrome()

# 打开页面
driver.get('http://example.com')

# 通过ID查找元素
element_by_id = driver.find_element_by_id('main')

# 通过name查找元素
element_by_name = driver.find_element_by_name('username')

# 通过XPath查找元素
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# 通过CSS选择器查找元素
element_by_css = driver.find_element_by_css_selector('div.content')

find_element和find_elements的区别

当你想捕获多个元素时(比如所有class是btn的按钮),你会需要用find_elements方法。find_elementfind_elements的区别在于,前者返回一个元素,后者返回的是一个元素列表。

Python

# 查找单个元素
single_element = driver.find_element_by_class_name('btn')

# 查找多个元素
multiple_elements = driver.find_elements_by_class_name('btn')

# 遍历找到的元素
for element in multiple_elements:
    print(element.text)

如你所见,find_elements非常适合用来处理页面上可能有多个的元素集合。每种find_element_xxx方法都有对应的find_elements_xxx,它返回的是一个元素列表。

2. 与元素的互动操作

与按钮、链接和输入框交互

现在你回顾了如何查找元素,是时候复习一下如何与它们交互了!这就像玩LEGO套件:需要准确地组合这些部件才能实现你的目标。

Selenium提供的方法可以用来与元素交互。我们再来看看,这是如何完成的:

Python

# 点击按钮
button = driver.find_element_by_id('submit')
button.click()

# 在输入框中输入文本
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# 获取元素文本
header = driver.find_element_by_tag_name('h1')
print(header.text)

处理事件和动态元素的操作

当涉及到动态元素的交互时,比如某些操作后才会出现的按钮,等待和延迟变得十分重要。Selenium 提供了方法来等待这些元素加载。一个常用的工具是将WebDriverWaitexpected_conditions结合起来使用。

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待按钮出现10秒
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

注意。 为了不每次都写expected_conditions,我们在import时已经将它重命名为EC

使用等待让你的脚本更可靠,不会因为临时的延迟或页面加载较慢而出错。在实际操作中,这样的情况非常常见——几乎每天都会遇到 :)

3. 有什么可能会出错?

什么都可能出错。 当你准备和元素交互时,突然就出现了问题。让我们讨论一些你可能会遇到的典型错误。

首先,NoSuchElementException——这是一个你可能经常看到的错误信息,尤其是当你试图查找页面上不存在的元素时。它会在你试图查找一个不存在的元素时被抛出。为了防止这种情况,你可以用try-except方法来捕获异常。

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("哎呀,元素好像找不到了!")

可能还会碰到动态元素和加载时间的问题。在这种情况下,请用我们之前讨论过的WebDriverWait来等待元素加载。

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