模拟人工网页操作全指南(点击 / 输入 / 滚动 / 提交)
它是目前应用最广泛的网页自动化工具, 能够精确地模拟人类使用浏览器进行的各种核心操作。下面这份教程对新手非常友好, 代码可以直接运行, 内容涵盖了点击、输入文字、滚动页面以及提交表单等主要功能部分, 同时还附带有完整的代码示例以及一些避免踩坑的小技巧。
一、首先要做好的前置准备就是, 需要去安装那些依赖项。
bash
运行
# 安装 Selenium 核心库pip install selenium
# 安装自动匹配浏览器版本的驱动(无需手动下载 ChromeDriver)
pip install webdriver-manager
2. 关于环境的具体状况以及第二部分所涉及的核心操作之实现情形, 现提供完整的源代码以供查看与参考之用。
这段给出的代码, 它把那些大家平时用得最多的操作步骤, 全都包在里面了, 这里面包括像点那个东西、往里输入字、滚动屏幕、交表格、选下拉菜单里的选项、还有上传文件这几类情况都覆盖了, 里面的解释说明写得特别清楚明白, 你直接把它复制过去就能拿来用。
运行
import timefrom selenium import webdriver
from selenium.webdriver.common.by import By # 元素定位方式
from selenium.webdriver.common.keys import Keys # 键盘按键
from selenium.webdriver.support.select import Select # 下拉框操作
from selenium.webdriver.support.wait import WebDriverWait # 显式等待
from selenium.webdriver.support import expected_conditions as EC # 等待条件
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 初始化 Chrome 浏览器(关键:自动匹配驱动版本)
def init_browser(headless=False):
"""
初始化浏览器
:param headless: 是否无头模式(无界面运行)
:return: 浏览器驱动对象
"""
chrome_options = webdriver.ChromeOptions()
# 基础配置:避免被识别为自动化程序
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# 无头模式(调试时可设为 False,显示浏览器界面)
if headless:
chrome_options.add_argument("--headless=new")
# 启动浏览器
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options
)
# 隐式等待:全局等待元素加载(最多10秒)
driver.implicitly_wait(10)
# 最大化窗口(模拟人工)
driver.maximize_window()
return driver
# 核心操作演示
if __name__ == "__main__":
# 1. 初始化浏览器
driver = init_browser(headless=False)
try:
# 2. 打开目标网页(以百度为例)
driver.get("https://www.baidu.com")
time.sleep(1) # 模拟人工等待页面加载
# ====================== 操作1:输入文本 ======================
# 定位搜索框(XPath 定位,最灵活)
search_box = driver.find_element(By.XPATH, '//input[@id="kw"]')
# 清空原有内容(避免残留)
search_box.clear()
# 输入关键词(模拟人工打字)
search_box.send_keys("Selenium 模拟人工操作")
time.sleep(1) # 模拟输入后停顿
# ====================== 操作2:提交表单(两种方式) ======================
# 方式1:按 Enter 键提交(更贴近人工)
search_box.send_keys(Keys.ENTER)
# 方式2:点击“搜索”按钮提交
# search_btn = driver.find_element(By.XPATH, '//input[@id="su"]')
# search_btn.click()
time.sleep(2) # 等待搜索结果加载
# ====================== 操作3:滚动页面(模拟人工翻页) ======================
# 滚动到底部(常用)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
# 滚动到顶部
driver.execute_script("window.scrollTo(0, 0);")
time.sleep(1)
# 滚动到指定位置(如Y轴 500px)
driver.execute_script("window.scrollTo(0, 500);")
time.sleep(1)
# ====================== 操作4:点击元素(示例:点击第一个搜索结果) ======================
# 显式等待:确保元素加载完成(比隐式等待更精准,推荐)
first_result = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[@id="content_left"]/div[1]/h3/a'))
)
first_result.click()
time.sleep(2)
# ====================== 扩展操作1:下拉框选择 ======================
# 示例(需替换为有下拉框的网页):
# driver.get("https://www.w3school.com.cn/tags/tryit.asp?
filename=tryhtml_select")
# # 切换到 iframe(下拉框在 iframe 内)
# driver.switch_to.frame("iframeResult")
# # 定位下拉框
# select = Select(driver.find_element(By.XPATH, '//select'))
# # 选择方式1:按值选择
# select.select_by_value("volvo")
# # 选择方式2:按文本选择
# select.select_by_visible_text("Saab")
# # 选择方式3:按索引选择
# select.select_by_index(2)
# time.sleep(1)
# ====================== 扩展操作2:文件上传 ======================
# 示例(需替换为有上传按钮的网页):
# upload_btn = driver.find_element(By.XPATH, '//input[@type="file"]')
# # 传入文件路径(绝对路径)
# upload_btn.send_keys("C:/test.txt")
# time.sleep(1)
print("所有操作执行完成!
")
except Exception as e:
print(f"操作出错:{str(e)}")
finally:
# 3. 关闭浏览器(无论成功/失败都执行)
time.sleep(3) # 停留3秒查看效果
driver.quit()
三、核心操作详解, 也就是第一步要做的基础要素定位。
它支持总共 8 种定位的方式, 如果你是新手的话, 建议优先把下面的这 3 种给它掌握住:
表格
定位方式
语法示例
适用场景
ID(最稳定)
By.ID, "kw"
这个元素包含了一个唯一的 ID, 比方说百度搜索引擎里那个搜索框。
XPath, 这是最为灵活的一个选项。
通过XPATH的方式, 去定位那个元素, 也就是使用这个表达式 '//input。
@name=""
'
在没有 ID 的情况下, 应该通过属性或者文本来进行定位。
CSS 选择器
By., "#su"
前端开发者常用,简洁
定位技巧:
2. 对核心操作步骤进行拆解, 第一步是把输入的文本处理一下。
运行
# 步骤:定位元素 → 清空 → 输入elem = driver.find_element(By.XPATH, '//input[@id="kw"]')
elem.clear() # 必须清空,避免原有内容干扰
elem.send_keys("要输入的内容")
(2)点击操作
运行
# 普通点击elem.click()
# 双击
elem.double_click()
# 右键点击
elem.context_click()
(3)滚动页面
运行
# 滚动到底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 滚动到顶部
driver.execute_script("window.scrollTo(0, 0);")
# 平滑滚动(更贴近人工)
driver.execute_script("window.scrollTo({top: 500, behavior: 'smooth'});")
(4)提交表单
运行
# 方式1:按 Enter 键(推荐,模拟人工)elem.send_keys(Keys.ENTER)
# 方式2:点击提交按钮
driver.find_element(By.XPATH, '//button[@type="submit"]').click()
3. 等待机制(避坑关键)
新手最常见的错误在于没有确保页面已经加载完成就开始进行操作, 这样一来就会导致系统抛出元素找不到的异常。针对这一问题, 我们可以提供两种不同的等待方式来解决这个麻烦。
表格
等待方式
语法示例
适用场景
隐式等待
.(10)
在更广泛的范围整体生效, 针对一些相对简单的场景条件。
显式等待(推荐)
(, 10).until(EC.ble((By.XPATH, '//')))
等到那个元素变成了可以被点击的状态, 或者看到了那个元素的存在。
四、这是一个让新人一定要看的避坑指南, 其中列出了元素定位失败的几个常见原因和解决办法。关于原因部分, 通常是因为目标元素嵌套在某个特定的框架内部、页面采用了动态加载机制导致的、或者你使用的定位指令本身写错了。
针对这些情况, 如果你发现元素确实存在于嵌套结构中, 你需要先用 ..frame("") 这个命令切换到对应的层级去操作, 等到任务完成了之后, 记得再用 ..() 切换回默认的主框架去。另外, 千万不要用 sleep 这种静态等待的方式, 而应该改用更具稳定性的显式等待功能来帮助程序识别状态。
最后, 请务必再次确认你的定位规则没有问题, 建议打开浏览器的 F12 开发者工具来进行仔细校验。
导致被网站识别为机器人的原因, 通常表现为缺少反检测配置, 或者操作速度过快;解决办法是, 需要在代码中添加反检测配置内容(诸如等要素), 并在每个操作步骤后面增加time.sleep(1-2)这样的代码段, 以此来模拟人工操作的正常节奏, 从而避免在短时间段内进行高频次的操作。
关于下拉框以及弹窗的操作失败问题,需要特别注意的是, 对下拉框进行操作时, 必须使用特定的类来执行, 绝不能直接点击, 而对于弹窗的处理, 应该首先处理弹窗部分的确认动作(例如弹出警报确认后, 再进行其他其他元素的操作)。
总结了一下核心流程, 那就是先初始化浏览器, 接着去定位元素, 然后再执行操作, 比如点击、输入或者滚动, 最后再关闭浏览器;关键的技巧在于要优先使用 XPath 来定位元素, 利用显式等待来避免加载带来的问题, 在执行完操作之后还要加上延时来模拟人工的操作;需要特别注意的避坑重点包括处理弹窗以及配置反检测参数等等, 同时还需要控制好操作的节奏和速度, 这样才能有效地避免被反爬机制给拦截住。