一、声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
二、Selenium 简介
- 定义
- 用于Web应用测试的工具,支持多浏览器(Chrome、Firefox、Edge等)。
- 爬虫场景:解决
requests
无法执行JavaScript的问题,模拟浏览器操作获取动态渲染内容。
- 核心原理
- 驱动浏览器模拟用户行为(点击、输入、滑动等),通过Python接口实现自动化操作。
三、使用场景
- 核心优势:自动执行JavaScript,抓取动态加载数据(如Ajax渲染内容)。
四、安装步骤
- 下载浏览器驱动
- 安装Selenium库
- 命令:
pip install selenium
- 命令:
- 版本注意:
- Selenium 4.11.2+ 无需手动指定驱动路径,直接调用
webdriver.Chrome()
。
- Selenium 4.11.2+ 无需手动指定驱动路径,直接调用
五、基础使用示例
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
:获取元素尺寸
七、页面交互操作
- 输入文本
input_box = browser.find_element(By.ID, 'kw') input_box.send_keys('selenium') # 输入文本
- 点击操作
button = browser.find_element(By.ID, 'su') button.click() # 模拟点击
- 清除文本
input_box.clear() # 清空输入框内容
- 回车提交
input_box.submit() # 模拟回车键
- 执行JavaScript
browser.execute_script('document.documentElement.scrollTop=10000') # 滑动页面
- 前进/后退
browser.back() # 后退 browser.forward() # 前进
八、无界面模式(Chrome Headless)
- 优势:
- 无界面渲染,运行效率更高,资源占用少。
- 使用条件:
- Chrome版本:Windows ≥60,Linux/Unix ≥59
- Python ≥3.6,Selenium ≥3.4
- 代码示例
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'),指定浏览器路径