一. 痛点
运维侠小白有下面烦恼,听说deepseek可以帮助提升学习python的效率,可是deepseek给的代码也报错,怎么办?
deepseek生成的代码也有可能报错,例如:
⏰执行报错:由提示得知,是少导入需要的模块,但是补全,还是报错,这就是deepseek的局限性。需要继续发问,才能解决。
多尝试,困难才会被克服
学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。
二.基础:准备工作
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
(1)安装 python-selenium模块
💻 代码:在命令行终端执行
# 安装必要库(命令行执行)
# pip install selenium
(2)XPath常用语法
表达式 | 说明 |
---|---|
//div | 所有div元素 |
//div[@id=‘header’] | id为header的div |
//input[@type=‘text’] | 类型为文本的输入框 |
title() | 获取当前页面标题 |
//a[contains(@href,‘pdf’)] | 链接包含pdf字符 |
//div[text()=‘立即学习’] | 文本精确匹配 |
(3)CSS选择器秘籍
选择器 说明
.className class选择器
#elementId id选择器
input[type=“submit”] 属性选择器
ul > li:first-child 直接子元素+伪类
div:hover 悬停状态(需用ActionChains触发)
三.进阶:元素定位方法详解
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
- 修改部分代码 可以举一反三,这个也能生成合同第一页。
(1)概览
📦语法:find_element(By.策略, “值”)
💻 代码:
from selenium.webdriver.common.by import By
# 八大金刚定位法
By.ID
By.NAME
By.CLASS_NAME
By.TAG_NAME
By.LINK_TEXT # 完整链接文本
By.PARTIAL_LINK_TEXT # 部分链接文本
By.XPATH
By.CSS_SELECTOR
如图:
(2)通过ID定位
✅ 元素定位之后我们有其他操作,比如,输入文字、点击搜索,为简化方便理解只展示定位。
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
play_button = driver.find_element(By.ID, "kw")
#play_button.click()
print(play_button)
# 关闭浏览器
#driver.quit()
如图:
(3)通过NAME定位
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
play_button = driver.find_element(By.NAME, "wd")
#play_button.click()
print(play_button)
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
如图:
(4)通过CLASS_NAME定位(班级名定位)
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
search_button = driver.find_element(By.CLASS_NAME, 's_btn')
search_button.click() # 点击搜索按钮
#play_button.click()
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
如图:
(5)通过TAG_NAME定位(标签名定位)
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
news_link = driver.find_element(By.LINK_TEXT, '新闻')
news_link.click() # 点击进入新闻页面
driver.back() # 返回百度首页
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
如图:
(6)通过LINK_TEXT定位(全文链接定位)
原理:通过超链接的 完整显示文本 定位。
百度示例:“新闻”链接
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
news_link = driver.find_element(By.LINK_TEXT, '新闻')
news_link.click() # 点击进入新闻页面
driver.back() # 返回百度首页
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
(7)通过PARTIAL_LINK_TEXT定位(部分链接定位)
原理:通过超链接的 部分文本 定位,类似模糊搜索。
百度示例:包含“地”字的链接(如“地图”)
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
map_link = driver.find_element(By.PARTIAL_LINK_TEXT, '地')
map_link.click() # 点击进入百度地图
driver.back() # 返回首页
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
(8)通过XPATH定位(路径定位)
原理:通过元素的层级路径定位,类似文件目录。
百度示例:精准定位搜索按钮
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
# 写法1:绝对路径(脆弱不推荐)
button = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input')
# 写法2:相对路径 + 属性组合(推荐!)
smart_xpath = driver.find_element(By.XPATH, '//input[@id="su" and @class="s_btn"]')
smart_xpath.click()
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
(9)通过CSS_SELECTOR定位(样式选择器)
原理:通过CSS样式规则定位,类似装修设计图。
百度示例:定位设置菜单
💻 代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动Edge浏览器
driver = webdriver.Edge()
# 1.打开网页
#driver.get("https://le.ouchn.cn/courseDetails/CSMC0000012933")
driver.get("https://www.baidu.com/")
# 2.定位到搜索框元素
# 定位右上角"设置"链接
settings = driver.find_element(By.CSS_SELECTOR, '#s-usersetting-top')
settings.click()
# 选择"高级搜索"(下拉菜单中的选项)
advanced_search = driver.find_element(By.CSS_SELECTOR, '.setpref[href="//www.baidu.com/gaoji/advanced.html"]')
advanced_search.click()
# 等待视频播放
time.sleep(100)
# 关闭浏览器
#driver.quit()
⏰提示:一种需求可以有多种类型代码实现,实际中,我们可以从中选择,最适合的。应用场景,如下:
企业合同管理系统基础模板
销售订单自动生成系统
财务报销单模板生成器
课程报名信息登记表
通过这个模板生成器,后续可以结合客户数据自动填充生成完整合同,实现办公自动化流程的完整闭环。
四.实战案例集锦:
Selenium4相对定位器
适用场景:当元素没有明确标识时,通过相对位置定位
💻 代码:
from selenium.webdriver.support.relative_locator import locate_with
# 定位密码输入框(位于用户名输入框下方)
password_field = driver.find_element(locate_with(By.TAG_NAME, "input")
.below(driver.find_element(By.ID, "username")))
# 定位提交按钮(在密码框右侧)
submit_btn = driver.find_element(locate_with(By.TAG_NAME, "button")
.to_right_of(password_field))
实战综合示例
适用场景:当元素没有明确标识时,通过相对位置定位
💻 代码:
# 自动化刷课完整流程
def auto_play_videos():
driver = webdriver.Edge()
driver.get("https://iam.pt.ouchn.cn/")
# 登录操作(使用NAME定位)
driver.find_element(By.NAME, 'username').send_keys('user123')
driver.find_element(By.NAME, 'password').send_keys('pass456')
driver.find_element(By.CSS_SELECTOR, 'button.login-btn').click()
# 进入课程列表(使用LINK_TEXT)
driver.find_element(By.LINK_TEXT, '我的课程').click()
# 遍历所有课程(CLASS_NAME定位组元素)
courses = driver.find_elements(By.CLASS_NAME, 'course-item')
for course in courses:
course.click()
# 使用XPath定位视频列表
videos = driver.find_elements(By.XPATH, '//div[@class="video-list"]/div')
for video in videos:
video.click()
# 使用相对定位器找播放按钮
play_btn = driver.find_element(locate_with(By.TAG_NAME, "button")
.below(driver.find_element(By.CLASS_NAME, 'video-title')))
play_btn.click()
time.sleep(60) # 模拟观看
driver.quit()
📒避坑指南:实际开发中建议使用 WebDriverWait 确保元素加载完成,避免因网络延迟导致定位失败
# 错误示例:class包含空格时
driver.find_element(By.CLASS_NAME, 'class1 class2') # 错误!
# 正确写法:只用其中一个class
driver.find_element(By.CLASS_NAME, 'class1') # 或改用CSS选择器
💡 扩展性:朋友们!可通过修改模板文件添加公司LOGO、联系方式等固定内容。
💡 调试技巧:先测试单个文档生成,再扩展为批量处理
💡在评论区告诉我,下期教你用Python搞定!