本文介绍python selenium 爬虫的功能以及使用
1. 基础核心功能
浏览器控制
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager# 自动管理浏览器驱动 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))# 控制浏览器窗口 driver.maximize_window() # 最大化窗口 driver.minimize_window() # 最小化窗口 driver.set_window_size(1200, 800) # 自定义尺寸
页面导航
driver.get("https://www.baidu.com") # 打开网页 driver.refresh() # 刷新页面 driver.back() # 返回上一页 driver.forward() # 前进下一页
元素定位(8种方式)
from selenium.webdriver.common.by import By# 常用定位方式 driver.find_element(By.ID, "kw") # ID定位 driver.find_element(By.NAME, "wd") # Name属性 driver.find_element(By.CLASS_NAME, "s_ipt") # Class名 driver.find_element(By.TAG_NAME, "input") # 标签名 driver.find_element(By.LINK_TEXT, "新闻") # 链接文本 driver.find_element(By.XPATH, "//input[@id='kw']") # XPath driver.find_element(By.CSS_SELECTOR, "#kw") # CSS选择器
2. 高级交互功能
表单操作
element = driver.find_element(By.ID, "kw") element.send_keys("Python") # 输入文本 element.clear() # 清空输入框 element.send_keys(Keys.RETURN) # 模拟回车键
鼠标 & 键盘动作
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys# 鼠标悬停/双击/右击 actions = ActionChains(driver) actions.move_to_element(element).perform() # 悬停 actions.double_click(element).perform() # 双击 actions.context_click(element).perform() # 右击# 键盘组合键 element.send_keys(Keys.CONTROL + 'a') # Ctrl+A全选
下拉框处理
from selenium.webdriver.support.select import Selectselect = Select(driver.find_element(By.TAG_NAME, "select")) select.select_by_index(1) # 按索引选择 select.select_by_value("opt1") # 按value值 select.select_by_visible_text("选项文本") # 按可见文本
3. 等待机制(避免元素未加载)
显式等待(推荐)
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 等待最多10秒,直到元素可见 element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "kw")) )
隐式等待(全局设置)
driver.implicitly_wait(5) # 每次查找元素最多等5秒
4. 高级特性
执行JavaScript
# 滚动页面/修改属性/复杂操作 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") driver.execute_script("arguments[0].style.border='3px solid red';", element)
Cookie管理
driver.get_cookie("session_id") # 获取指定cookie driver.add_cookie({"name": "test", "value": "123"}) # 添加cookie driver.delete_all_cookies() # 清除所有cookie
截图与日志
driver.save_screenshot("error.png") # 页面截图# 获取控制台日志 logs = driver.get_log("browser") # Chrome需配置选项
5. 实际应用场景
自动化测试
# 登录测试示例 def test_login():driver.find_element(By.ID, "username").send_keys("test")driver.find_element(By.ID, "password").send_keys("123456")driver.find_element(By.ID, "submit").click()assert "欢迎页" in driver.title
数据爬取
# 爬取动态渲染的新闻标题 titles = driver.find_elements(By.CSS_SELECTOR, ".news-title") for title in titles:print(title.text)
文件上传
driver.find_element(By.ID, "file-upload").send_keys("/path/to/file.txt")
6. 特殊场景处理
iframe切换
driver.switch_to.frame("iframe_id") # 进入iframe driver.switch_to.default_content() # 返回主文档
多窗口/标签页
driver.switch_to.window(driver.window_handles[1]) # 切换到第二个标签页
无头模式(Headless)
options = webdriver.ChromeOptions() options.add_argument("--headless") # 无界面运行 driver = webdriver.Chrome(options=options)
总结表格
功能类别 | 主要方法/类 | 典型应用场景 |
---|---|---|
浏览器控制 | webdriver.Chrome() | 启动/关闭浏览器 |
元素定位 | By 类 + find_element() | 表单填写/按钮点击 |
等待机制 | WebDriverWait + EC | 处理动态加载内容 |
高级交互 | ActionChains /Select | 鼠标操作/下拉框选择 |
JavaScript执行 | execute_script() | 页面滚动/修改DOM属性 |
多窗口处理 | switch_to.window() | 处理弹出窗口/多标签页 |
通过组合这些功能,可以完成从简单自动化到复杂爬虫/测试的全流程操作。建议从基础定位和交互开始练习,逐步掌握高级特性。
下载 ChromeDriver 的简单方法
自动下载(推荐)
使用 webdriver-manager
库可以自动下载匹配的 ChromeDriver:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager# 自动下载并安装 ChromeDriver driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get("https://www.google.com")
安装 webdriver-manager
:
pip install webdriver-manager
自动下载关键特点
-
自动版本管理:
-
会自动检测你安装的 Chrome 浏览器版本
-
下载匹配的 ChromeDriver 版本
-
-
目录结构:
.wdm/ └── drivers/└── chromedriver/└── [操作系统类型]/└── [版本号]/└── chromedriver[.exe]
-
无需手动配置:
-
每次运行时会检查是否已有匹配版本
-
如果没有或版本不匹配,会自动下载新版
-
查看实际路径的方法
如果你想查看具体安装在哪里,可以临时修改代码:
from webdriver_manager.chrome import ChromeDriverManager
path = ChromeDriverManager().install()
print(f"ChromeDriver 安装在: {path}")
这会在控制台输出类似:
%runfile C:/python/installChromDriver.py --wdir
ChromeDriver 安装在: C:\Users\leon\.wdm\drivers\chromedriver\win64\136.0.7103.49\chromedriver-win32/chromedriver.exe