Python爬虫基础之Selenium详解

发布于:2025-06-11 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。

二、Selenium 简介

  1. 定义
    • 用于Web应用测试的工具,支持多浏览器(Chrome、Firefox、Edge等)。
    • 爬虫场景:解决requests无法执行JavaScript的问题,模拟浏览器操作获取动态渲染内容。
  2. 核心原理
    • 驱动浏览器模拟用户行为(点击、输入、滑动等),通过Python接口实现自动化操作。

三、使用场景

  • 核心优势:自动执行JavaScript,抓取动态加载数据(如Ajax渲染内容)。

四、安装步骤

  1. 下载浏览器驱动
    • Chrome驱动
    • 操作:匹配本地Chrome版本(如Chrome 116选测试版118),解压驱动到项目根目录。
  2. 安装Selenium库
    • 命令:pip install selenium
  3. 版本注意
    • Selenium 4.11.2+ 无需手动指定驱动路径,直接调用webdriver.Chrome()

五、基础使用示例

from selenium import webdriver

# 创建浏览器对象(旧版本需指定驱动路径,新版本无需)
browser = webdriver.Chrome()  # 或 webdriver.Chrome('chromedriver.exe')

# 访问网站
url = "https://www.baidu.com"
browser.get(url)

# 获取页面源码
content = browser.page_source
print(content)

# 关闭浏览器
browser.quit()

需要注意的是,如果你的 selenium 是4.11.2以上的版本,不需要设置driver.exe的路径,selenium 可以自己处理浏览器的驱动程序,因此代码直接改为brower = webdriver.Chrome()即可。

运行代码,得到下面的效果:
在这里插入图片描述

六、元素定位方法

定位方式 示例代码 说明
ID定位 browser.find_element(By.ID, 'su') 通过标签id属性精准定位
Name定位 browser.find_element(By.NAME, 'wd') 通过标签name属性定位
XPath定位 browser.find_element(By.XPATH, '//input[@id="su"]') 通过XPath路径表达式定位
标签名定位 browser.find_elements(By.TAG_NAME, 'input') 通过标签名获取多个元素(复数形式)
CSS选择器定位 browser.find_elements(By.CSS_SELECTOR, '#su') 通过CSS选择器语法定位
链接文本定位 browser.find_elements(By.LINK_TEXT, '地图') 精确定位锚点文本
部分文本定位 browser.find_elements(By.PARTIAL_LINK_TEXT, '地') 模糊匹配锚点文本
Class定位 browser.find_element(By.CLASS_NAME, 'wrapper_new') 通过标签class属性定位

元素信息获取

  • get_attribute('属性名'):获取元素属性(如class
  • tag_name:获取标签名
  • text:获取元素文本内容
  • location:获取元素坐标位置
  • size:获取元素尺寸

七、页面交互操作

  1. 输入文本
    input_box = browser.find_element(By.ID, 'kw')
    input_box.send_keys('selenium')  # 输入文本
    
  2. 点击操作
    button = browser.find_element(By.ID, 'su')
    button.click()  # 模拟点击
    
  3. 清除文本
    input_box.clear()  # 清空输入框内容
    
  4. 回车提交
    input_box.submit()  # 模拟回车键
    
  5. 执行JavaScript
    browser.execute_script('document.documentElement.scrollTop=10000')  # 滑动页面
    
  6. 前进/后退
    browser.back()  # 后退
    browser.forward()  # 前进
    

八、无界面模式(Chrome Headless)

  1. 优势
    • 无界面渲染,运行效率更高,资源占用少。
  2. 使用条件
    • Chrome版本:Windows ≥60,Linux/Unix ≥59
    • Python ≥3.6,Selenium ≥3.4
  3. 代码示例
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')  # 启用无界面模式
    chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速(可选)
    chrome_options.binary_location = r'C:\Chrome安装路径\chrome.exe'  # 指定浏览器路径
    
    browser = webdriver.Chrome(options=chrome_options)
    browser.get('https://www.baidu.com')
    browser.save_screenshot('baidu.png')  # 保存页面截图
    

思维导图

## **声明**
- 仅限学习交流,严禁商业/非法用途
## **简介**
- 定义:Web测试工具,支持多浏览器
- 爬虫用途:解决JS执行问题,模拟浏览器操作
## **使用场景**
- 核心优势:执行JS,抓取动态内容
## **安装**
- 下载驱动:稳定版/测试版地址,匹配Chrome版本
- 安装库:pip install selenium
- 版本注意:4.11.2+无需手动设置驱动路径
## **基础使用**
- 创建对象:webdriver.Chrome()
- 访问网站:get(url)
- 获取源码:page_source
## **元素定位**
- ID定位:find_element(By.ID, 'id')
- Name定位:find_element(By.NAME, 'name')
- XPath定位:find_element(By.XPATH, '路径')
- CSS定位:find_elements(By.CSS_SELECTOR, '选择器')
- 文本定位:LINK_TEXT/PARTIAL_LINK_TEXT
- Class定位:find_element(By.CLASS_NAME, 'class')
- 信息获取:属性、标签名、文本、位置、尺寸
## **交互操作**
- 输入:send_keys()
- 点击:click()
- 清除:clear()
- 提交:submit()
- 执行JS:execute_script()
- 导航:back()/forward()
## **无界面模式**
- 优势:高效、低资源占用
- 条件:Chrome ≥60,Python ≥3.6,Selenium ≥3.4
- 配置:add_argument('--headless'),指定浏览器路径

在这里插入图片描述