实战:模拟读书屋用户行为(登录、过滤与阅读)
本脚本展示了如何使用 Selenium 驱动浏览器完成登录、作品筛选以及书籍点击的自动化流程。
脚本逻辑分解
1. 基础环境准备
设置浏览器最大化并打开登录页。
PYTHON
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://120.25.127.201:18001/user/login.html')
sleep(1) # 给予加载缓冲
2. 核心:定位与交互
在这个环节中,我们优先使用了 ID 和 LINK_TEXT 进行定位,保证了用例的稳定性。
- 登录流: 找到输入框并填充信息。
- 导航流: 找到文字链接并点击。
PYTHON
# 登录动作
driver.find_element(By.ID, 'txtUName').send_keys('15311110001') # 账号输入
driver.find_element(By.ID, 'txtPassword').send_keys('123456') # 密码输入
driver.find_element(By.ID, 'btnLogin').click() # 点击登录
sleep(2)
# 筛选并阅读作品
driver.find_element(By.LINK_TEXT, '全部作品').click()
driver.find_element(By.LINK_TEXT, '30万字以下').click()
sleep(1)
# 使用 XPath 轴定位的示例:点击列表搜索出来的第一行书籍
driver.find_element(By.XPATH, '//*[@id="bookList"]/tr[1]/child::td[3]/a').click()
避坑指南与进阶建议
1. 关于 sleep 的隐患
脚本中使用了大量的 time.sleep()。这虽然直观,但会导致用例运行速度整体下降。
改进建议:隐式等待 (Implicit Wait)
在启动浏览器后,可以配置一次性等待,Selenium 在定位不到元素时会在时限内反复重试:
driver.implicitly_wait(10) # 全局生效,每次定位最长等 10s。
2. 元素被遮挡或不可见
如果脚本报错「Element Not Interactable」,可能是因为页面滚动不到位或加载弹窗遮挡。
- 方案: 可尝试使用
WebDriverWait结合element_to_be_clickable条件。
课后任务 (Homework)
- 实操定位: 在读书屋项目中,尝试用 CSS Selector 重写登录环节。
- 脚本练习: 完成完整的「从搜索 -> 点击 -> 翻页阅读」全周期自动化脚本。
- 内省思考: 考虑如果你司的项目没有唯一的 ID,你应该如何设计一套更健壮的 XPath 或 CSS 定位库?
下一节预告
下节课我们将学习如何处理弹窗、多窗口切换以及鼠标悬停等高级交互。