1. 环境初始化与浏览器配置

这是脚本的开头必备,负责启动浏览器、配置驱动。

python

运行

# 1. 导入核心依赖(必导)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 2. 初始化 Chrome 浏览器(自动匹配驱动,推荐)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 3. 可选:初始化 Firefox 浏览器(需额外安装 geckodriver,同理 Edge)
# driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))

# 4. 浏览器窗口配置(常用)
driver.maximize_window()  # 窗口最大化(你已用到)
driver.set_window_size(1920, 1080)  # 自定义窗口大小(宽×高)
driver.set_page_load_timeout(30)  # 页面加载超时时间(30秒)

2. 页面导航与基础操作

负责打开网页、刷新、后退 / 前进等页面级操作。

python

运行

# 1. 打开目标网页(核心)
driver.get("https://www.xxx.com")

# 2. 页面刷新
driver.refresh()

# 3. 浏览器后退(返回上一页)
driver.back()

# 4. 浏览器前进(前往下一页)
driver.forward()

# 5. 关闭页面/浏览器(必写,释放资源)
driver.close()  # 关闭当前标签页(多标签页时用)
driver.quit()   # 关闭整个浏览器进程(推荐,你已用到)

3. 元素定位(核心中的核心)

Selenium 操作元素的前提是「找到元素」,By 类提供了 8 种定位方式,以下是最常用的 5 种。

python

运行

# 前提:等待元素加载完成(显式等待,推荐)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 1. 通过 ID 定位(最稳定,优先使用,你已用到)
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.ID, "username"))
)

# 2. 通过 XPath 定位(最灵活,万能,你已大量用到)
# 绝对 XPath(不推荐,页面结构变化易失效):/html/body/div[1]/input
# 相对 XPath(推荐,灵活稳定)://*[@id="ignoreButton"]、//button[contains(text(),"登录")]
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="plainPassword"]'))
)

# 3. 通过 Name 定位(表单元素常用,如输入框、单选框)
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.NAME, "phone"))
)

# 4. 通过 Class Name 定位(注意:class 有空格时不可用,匹配单个 class 值)
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.CLASS_NAME, "login-btn"))
)

# 5. 通过链接文本定位(仅针对 <a> 标签)
# 精确匹配链接文本
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "忘记密码?"))
)
# 模糊匹配链接文本(更灵活)
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "忘记"))
)

4. 元素交互操作(定位后必做)

找到元素后,对元素进行点击、输入、清空等操作。

python

运行

# 1. 输入文本(输入框专用,你已用到)
element.send_keys("要输入的内容")

# 2. 清空输入框内容(输入前推荐使用,你已用到)
element.clear()

# 3. 点击元素(按钮、链接、复选框等,你已用到)
element.click()

# 4. 获取元素文本(如获取标题、按钮文字,你最初用到过)
text = element.text
print("元素文本:", text)

# 5. 获取元素属性值(如获取 input 的 value、a 标签的 href)
attribute_value = element.get_attribute("value")  # 获取 input 输入的内容
href_value = element.get_attribute("href")  # 获取 a 标签的链接地址

5. 等待方式(解决页面加载延迟,避免报错)

新手最容易踩「元素未加载就操作」的坑,三种等待方式按需使用。

python

运行

# 1. 显式等待(推荐,精准,你已用到)
# 等待指定元素可点击,最长等待 15 秒,超时报错
element = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="ignoreButton"]'))
)

# 常用的 expected_conditions 还有:
# EC.presence_of_element_located()  # 元素仅需存在于 DOM 中(无需可点击)
# EC.visibility_of_element_located()  # 元素需可见(不被隐藏)

# 2. 隐式等待(全局生效,辅助显式等待)
# 脚本执行过程中,所有元素定位都会等待最多 5 秒,超时未找到才报错
driver.implicitly_wait(5)

# 3. 强制等待(简单粗暴,不推荐,仅用于临时调试)
import time
time.sleep(5)  # 强制等待 5 秒,无论页面是否加载完成

6. 弹窗处理(常用,如登录后的提示弹窗)

python

运行

# 1. 处理原生弹窗(alert/confirm/prompt)
alert = driver.switch_to.alert  # 切换到弹窗

alert.text  # 获取弹窗文本内容
alert.accept()  # 点击弹窗「确定」按钮
alert.dismiss()  # 点击弹窗「取消」按钮
alert.send_keys("输入弹窗需要的内容")  # 仅 prompt 弹窗可用

# 2. 处理自定义弹窗(如网站自己的弹窗,你已解决)
# 直接定位弹窗的关闭按钮,点击即可(如你的 ignoreButton)

二、 优质 Selenium 常用语句参考文章来源

  1. 官方文档(最权威,英文)

    Selenium 官方文档的「WebDriver API」部分详细梳理了所有语句,适合进阶查阅:

    Selenium Python 官方文档

  2. 国内优质中文教程(新手友好)

    • 「菜鸟教程 - Selenium 教程」:梳理了基础常用语句,附带简单示例,适合入门快速查阅

      菜鸟教程 Selenium Python

    • 「CSDN 优质专栏」:搜索关键词「Selenium Python 常用语句 总结」,大量博主整理了实战化的语句清单,附带踩坑说明,贴近实际开发(推荐筛选「原创」「点赞高」的文章)

  3. 实战类笔记(推荐)

    搜索关键词「Selenium Python 自动化实战 常用语法」,这类文章会结合实际场景(如登录、表单提交、数据爬取)整理常用语句,比纯理论更易理解,和你的需求高度匹配。

总结

  1. 核心常用语句集中在「元素定位」「元素交互」「显式等待」三大块,这是编写自动化脚本的基础。

  2. 你当前的脚本已经用到了大部分核心语句,后续扩展功能(如文件上传、下拉框选择)可参考上述推荐文章补充。

  3. 新手编写脚本时,优先使用「ID 定位」+「显式等待」+「核心交互语句」,能大幅提升脚本稳定性,减少报错。

  4. 查阅资料时,优先选择「Python 版本」的内容(Selenium 支持多语言),避免混淆语法。