运维侠职场日记24:用DeepSeek三天通关详解新手必看!保姆级教学Python+Selenium手把手教学网页自动化基础XPath与CSS选择器精讲

一. 痛点

运维侠小白有下面烦恼,听说deepseek可以帮助提升学习python的效率,可是deepseek给的代码也报错,怎么办?

在这里插入图片描述
在这里插入图片描述

欢迎阅读:Python邮件自动化大全打工人逆袭

deepseek生成的代码也有可能报错,例如:

⏰执行报错:由提示得知,是少导入需要的模块,但是补全,还是报错,这就是deepseek的局限性。需要继续发问,才能解决。

多尝试,困难才会被克服

学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。
在这里插入图片描述

二.基础:准备工作

⚠️避免报错:

  1. 文件路径 没有写绝对路径默认是处理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触发)

三.进阶:元素定位方法详解

⚠️避免报错:

  1. 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
  2. 修改部分代码 可以举一反三,这个也能生成合同第一页。

(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搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术职场教练

您的是我坚持原创免费作品的不懈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值