当前位置:首页>python>Python自动化神器Selenium超详解,建议收藏!

Python自动化神器Selenium超详解,建议收藏!

  • 2026-10-11 07:57:07
Python自动化神器Selenium超详解,建议收藏!
【引言】

每天都在重复着登录网站、点击按钮、下载数据的机械操作?加班到深夜,只是为了把网页上的表格一点点复制到Excel里?

醒醒吧!你的时间比这宝贵得多!

今天,给大家带来一款Python自动化测试与爬虫界的“核武器”——Selenium。它可以让你的浏览器变成一个听话的机器人,你喝咖啡的时间,它已经帮你把活干完了!

本文从零开始,带你全面搞定Selenium,建议先收藏再看!👍


🤔 一、 什么是 Selenium?

简单来说,Selenium 是一个用于Web应用程序测试的工具,但它在Python圈子里,更出名的身份是动态网页爬虫神器。

传统的 Requests 库只能获取网页的源代码,但如果数据是 JavaScript 动态加载的(比如往下滚才出现的内容),Requests 就抓瞎了。而 Selenium 的绝招是:它直接驱动真实的浏览器去操作!

你能做的(点击、输入、滚动、截图),它都能做;你不能做的(一天点一万次),它也能做!


🛠️ 二、 环境搭建:只需两步

1. 安装 Selenium 库打开终端,一行命令搞定:

ounter(linepip install selenium

2. 下载浏览器驱动(重点!)Selenium 需要一个“驾驶员”来操控浏览器,以 Chrome 为例,你需要下载 ChromeDriver。

  • 查看你的 Chrome 浏览器版本:右上角三个点 -> 帮助 -> 关于 Google Chrome。
  • 下载对应版本的 Driver:去 ChromeDriver 官网下载与你的浏览器大版本号对应的压缩包。
  • 配置环境变量:把解压出来的 chromedriver.exe 放到 Python 的安装目录下,或者配置到系统的环境变量里。

(💡 小贴士:Selenium 4.6 以上版本自带了 Selenium Manager,可以自动下载和管理驱动,越来越智能啦!)


🚀 三、 实战演练:5分钟写出自动操作脚本

让我们以最基础的百度搜索为例,感受一下 Selenium 的魅力。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom selenium import webdriverfrom selenium.webdriver.common.by import Byimport time# 1. 打开浏览器driver = webdriver.Chrome()# 2. 访问百度driver.get("https://www.baidu.com")# 3. 找到搜索框,输入关键字# 这里用的是元素的 ID 定位search_box = driver.find_element(By.ID, "kw")search_box.send_keys("Python Selenium")# 4. 找到“百度一下”按钮,并点击search_btn = driver.find_element(By.ID, "su")search_btn.click()# 5. 等待2秒,让我们看看搜索结果time.sleep(2)# 6. 退出浏览器driver.quit()

运行这段代码,你会看到电脑自动打开了 Chrome,输入了文字,点击了搜索,然后自动关闭。是不是很酷?


🎯 四、 核心技能:元素定位(找对人是关键)

操作网页的前提是“找到那个按钮/输入框”。Selenium 提供了 8 种定位方式,目前最推荐使用 By 类的写法:

  1. By.ID:最首选,速度最快,就像找人的身份证号。driver.find_element(By.ID, "username")
  2. By.NAME:像找同名同姓的人,可能不唯一。driver.find_element(By.NAME, "email")
  3. By.CLASS_NAME:通过 CSS 类名定位。driver.find_element(By.CLASS_NAME, "btn-primary")
  4. By.TAG_NAME:通过标签名(如 div, input),通常用于定位一组元素。
  5. By.LINK_TEXT:专门定位超链接,必须完全匹配链接文字。driver.find_element(By.LINK_TEXT, "登录")
  6. By.PARTIAL_LINK_TEXT:超链接的部分文字匹配。
  7. By.CSS_SELECTOR:强烈推荐! 语法强大,几乎可以定位任何元素。driver.find_element(By.CSS_SELECTOR, "#username > input")
  8. By.XPATH:终极杀器! 最灵活,哪怕元素没有ID也能通过层级关系找到,但性能略慢。driver.find_element(By.XPATH, "//input[@placeholder='请输入密码']")

(🔥 技巧:在浏览器按 F12 打开开发者工具,选中元素右键 -> Copy -> Copy XPath / Copy selector,一键获取定位代码!)


⏳ 五、 进阶必学:等待机制(告别 ElementNotInteractable)

很多新手刚学 Selenium 时,最常遇到的报错就是:“元素不可见”或“找不到元素”。

为什么?因为网页还没加载完,你的代码就急着去点击了!这时候必须引入等待机制。

❌ 绝对不推荐:time.sleep(5)(死等,太傻,严重影响效率)

✅ 强烈推荐:显式等待让程序智能地等待,直到某个条件成立,最多等多少秒。如果1秒就加载出来了,绝不浪费第2秒。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 智能等待:最多等10秒,直到百度搜索框出现try:    element = WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.ID, "kw"))    )finally:    driver.quit()

🥷 六、 高阶技巧:隐身模式与反反爬

现在的网站都很聪明,一看你是 Selenium,就给你弹验证码或者直接封 IP。怎么破?

1. 隐藏 Selenium 特征默认情况下,Selenium 驱动的浏览器会有一个变量 window.navigator.webdriver 值为 true。网站就是通过这个抓你的!

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 在打开浏览器前,加入实验性配置options = webdriver.ChromeOptions()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=options)# 执行 CDP 命令,彻底隐藏 webdriver 特征driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {  "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})

2. 使用代理 IP

ounter(lineoptions.add_argument('--proxy-server=http://你的代理IP:端口')

3. 使用无头模式不需要显示浏览器界面,在服务器上默默运行,速度更快。

ounter(lineoptions.add_argument('--headless')

💡 七、 避坑指南(干货总结)

  1. 记得 quit():操作完一定要 driver.quit(),不要只用 close(),否则后台会残留大量 chromedriver 进程,吃光你的内存!
  2. 遇到弹窗怎么办:如果是原生弹窗(alert),用 driver.switch_to.alert.accept();如果是网页自定义弹窗,找到弹窗的关闭按钮点击即可。
  3. iframe 嵌套:如果代码明明没问题但死活定位不到元素,看看是不是在 iframe 里面!需要先切换:driver.switch_to.frame("iframe_name"),操作完记得切回主页面:driver.switch_to.default_content()。
  4. 版本匹配:浏览器会悄悄自动更新,一旦更新,原有的 ChromeDriver 可能就失效了。遇到驱动报错,第一时间检查版本号!

📝 总结

Selenium 是一把自动化和爬虫的利器,掌握它,你就能解放双手,让电脑为你打工。

核心学习路径:定位元素 -> 模拟操作 -> 显式等待 -> 隐藏特征。

最新文章

随机文章