CodeGym /课程 /Python SELF ZH /在网页上自动化处理表单和按钮以收集数据

在网页上自动化处理表单和按钮以收集数据

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

1. 技术基础

填写并提交表单

处理表单通常用于自动化用户注册、填写问卷、收集数据等等。当你需要填写几百个表单时,手动操作就像试图通过吸管吃西瓜。而使用我们使用 Selenium 的超级技能,这些操作只需要几秒钟。

首先,让我们学习如何填写文本字段和提交表单。以一个典型的网站登录表单为例,我们来学习主要步骤:

Python

from selenium import webdriver

# 设置驱动程序 (例如,ChromeDriver)
driver = webdriver.Chrome()

try:
    # 打开网页
    driver.get("https://example.com/login")

    # 找到用户名输入字段并输入文本
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("我的登录")

    # 找到密码输入字段并输入文本
    password_input = driver.find_element_by_name("password")
    password_input.send_keys("我的密码")

    # 找到提交按钮并点击
    submit_button = driver.find_element_by_name("submit")
    submit_button.click()

finally:
    # 关闭驱动程序
    driver.quit()
    

验证和处理错误

没有什么比程序员更讨厌的就是错误在不该出现的时候弹出。因此,提前处理它们。使用 try/except 捕获错误,并记录日志以便弄清问题所在。

Python

try:
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("我的登录")
except Exception as e:
    print(f"填写用户名时出错: {e}")
    logging.error("填写用户名时出错", exc_info=True)
    

2. 复选框 (Checkboxes)

现在我们已经学会点击按钮了,接下来试试从列表中选择多个选项。要选中或取消选中复选框,也可以使用方法 click()。如果需要检查复选框是否被选中,可以使用属性 is_selected()

Python

checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
    checkbox.click()
    

3. 单选按钮 (Radio Buttons)

单选按钮允许从多个选项中选择一个。处理方式和复选框类似:用 click() 方法选择选项,用 is_selected() 检查状态。

Python

radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
    radio_button.click()
    

4. 下拉列表 (Dropdowns)

下拉列表包含多个选项可选。在 Selenium 中有一个 Select 类,提供了操作这些列表的方法。

Python

from selenium.webdriver.support.ui import Select

dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
    

同样可以使用 select_by_index()select_by_value() 来选择选项。

5. 文本区域 (Text Areas)

文本区域类似于文本字段,但通常用于输入大段文本。操作方式与文本字段相同。

Python

text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("这是一个示例文本,用于文本区域。")
    

6. 日期选择器 (Date Picker)

日期字段允许用户选择日期。如果它是支持日期格式的普通文本字段,可以使用 send_keys() 输入特定格式的值。

Python

date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25")  # 日期格式可能因网站而异
    

但有些日期字段要求执行其他操作,例如打开弹出的日历并选择日期。

7. 文件上传字段 (File Upload)

这些字段允许上传文件到服务器。可以使用 send_keys() 方法输入本地计算机上的文件路径与之交互。

Python

file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
    

8. 隐藏字段 (Hidden Fields)

隐藏字段不会显示在页面上,但可能用于存储提交表单所需的信息。只有在你有访问权限时才能与之交互(例如检查或更改其值)。

Python

hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Hidden field value:", value)
    

9. 验证操作是否成功

获取操作完成的信息是你的成功指针。提交表单后,你肯定想确认申请已经被成功接收,对吧?以下是实现方法:

Python

# 验证是否成功登录到网站
if "欢迎" in driver.page_source:
    print("登录成功!")
else:
    print("登录时出现错误。")
    

10. 问题与解决方案

问题

  • 运行不稳定: 网页经常更新。页面结构的更改可能导致脚本失败,因此定期检查代码的时效性是必要的。
  • 网络速度依赖性: 页面和元素的加载时间可能会有所不同。使用显式等待(explicit waits)处理延迟。

解决方案

  • 日志记录: 记录所有操作日志以更好地定位问题。使用 logging 库会大大简化日志记录。
  • 代码模块化: 将复杂操作划分为函数和模块,以便更容易修改和测试。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION