什么是 Selenium?selenium如何使用

学习资料+兼职渠道在文末!!

学习资料+兼职渠道在文末!

Selenium 由 Jason Huggins 于 2004 年发起,最初名为 JavaScript Testing Framework,后因受到希腊神话中“月亮女神 Selene”的启发而更名为 Selenium。它最初是为了解决网页自动化测试需求而诞生的开源工具,但因其能模拟真实浏览器操作(如点击、输入、滚动等),也被广泛用于网页数据爬取。爬虫工具有很多,例如 BeautifulSoup4,为什么选择自动化测试工具 Selenium 进行爬虫?目前绝大部分 Web 应用都使用 JavaScrip 动态加载数据,而 BeautifulSoup4 只能解析初始页面的 HTML 源码,对于动态加载的数据无法获取,因此使用 Selenium 模拟用户,完成数据加载的操作。

场景SeleniumBeautifulSoup4
动态网页数据爬取✅ 必须使用,如单页应用、JavaScript 渲染内容。❌ 无法直接处理,需结合其他工具(如 Selenium 获取动态内容后解析)。
静态网页数据提取⚠️ 可用,但效率较低。✅ 推荐,快速解析固定结构的 HTML/XML。
登录验证/表单提交✅ 直接模拟用户输入和点击。❌ 需结合 Requests 会话保持,但无法处理 JavaScript 验证。
跨浏览器兼容性测试✅ 支持多浏览器并行测试(如通过 Selenium Grid)。❌ 无此功能,仅解析 HTML。

环境搭建与配置

安装 Selenium

创建 Python 虚拟环境后,执行命令安装 selenium 包。

pip install selenium

下载浏览器驱动

下面以 Edge 浏览器为例:

  1. 确认 Edge 版本:
    • 设置 → 关于 Microsoft Edge。

  2. 下载对应版本的浏览器驱动:
  3. 配置驱动路径:
    • 方式一:将 edgedriver.exe 放置在任意已知的目录中或添加到系统环境变量中。
      from selenium import webdriver
      from selenium.webdriver.edge.service import Service
      
      service = Service(executable_path='D:/msedgedriver.exe')
      driver = webdriver.Edge(service=service)
      

      方式二:使用 WebDriverManager 自动管理驱动

      # 安装 WebDriverManager
      pip install webdriver-manager
      
      # 使用代码自动下载驱动
      from selenium import webdriver
      from selenium.webdriver.edge.service import Service
      from webdriver_manager.microsoft import EdgeChromiumDriverManager
      
      service = Service(executable_path=EdgeChromiumDriverManager().install())
      driver = webdriver.Edge(service=service)
      

      基础操作

      启动浏览器并访问网页

      from selenium import webdriver
      from selenium.webdriver.edge.service import Service
      
      service = Service(executable_path='D:/msedgedriver.exe')
      driver = webdriver.Edge(service=service)
      driver.get("https://www.baidu.com/")
      

      启动浏览器并访问网页

      from selenium import webdriver
      from selenium.webdriver.edge.service import Service
      
      service = Service(executable_path='D:/msedgedriver.exe')
      driver = webdriver.Edge(service=service)
      driver.get("https://www.baidu.com/")
      

      定位网页元素

      不管是爬虫或者是测试,获取到“感兴趣”的元素才能进行后续的操作。常见的定位方法有这样几种方式:

      定位方式语法示例适用场景
      IDdriver.find_element(By.ID, "username")通过元素的 id 属性定位,唯一性高,但需要目标元素有 id
      CSS 选择器driver.find_element(By.CSS_SELECTOR, ".login")通过 CSS 选择器定位,灵活,适合复杂结构
      XPathdriver.find_element(By.XPATH, "//button[@type='submit']")通过 XPath 路径定位,精准,但路径易变,维护成本高
      通过 ID 定位
      from selenium.webdriver.common.by import By
      
      element = driver.find_element(By.ID, "su")
      

      通过 CSS 选择器定位
      element = driver.find_element(By.CSS_SELECTOR, ".s_btn")
      

      通过 XPath 定位
      element = driver.find_element(By.XPATH, "//*[@id="su"]")
      

      与元素交互

      提取数据
      # 获取页面标题
      title = driver.title
      # 获取元素文本、属性
      text = element.text
      href = element.get_attribute("href")
      
      交互操作
      # 输入文本
      search_input = driver.find_element(By.ID, "kw")
      search_input.clear()  # 清除原有内容
      search_input.send_keys("电脑玩家张高兴")
      # 点击按钮
      search_btn = driver.find_element(By.ID, "su")
      search_btn.click()
      

      设置等待时间

      driver.implicitly_wait(10)  # 等待 10 秒
      

      切换页面

      Selenium 不会主动的切换窗口,要对新弹出的页面进行操作,需要先调用 switch_to 切换到该页面。

      # 获取所有窗口,将页面切换到最新的窗口
      windows = driver.window_handles
      driver.switch_to.window(windows[-1])
      

      执行 JavaScript 代码

      有时网页数据是动态加载的,因此需要执行 JavaScript 代码,完成数据加载这一行为的触发。

      # 模拟滚动到底部加载更多内容
      driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
      

      关闭浏览器

      driver.quit()
      

      进阶技巧

      使用 ActionChains 模拟用户操作

      ActionChains 是 Selenium 提供的一个低级用户交互模拟工具,用于执行复杂的鼠标和键盘操作。它通过构建一系列动作(如鼠标移动、点击、拖拽、键盘按键等)的队列,模拟真实用户的操作流程。

      常用方法
      方法功能
      move_to_element(element)鼠标悬停在指定元素上
      click(element)点击元素
      click_and_hold(element)按住鼠标左键
      context_click(element)右键点击元素
      double_click(element)双击元素
      drag_and_drop(source, target)拖拽元素到目标位置
      move_by_offset(x, y)从当前位置移动鼠标到相对坐标(x,y)
      key_down(key, element)按下某个键(如 Keys.CONTROL),并保持按下状态
      key_up(key, element)松开之前按下的键
      send_keys(keys)向当前焦点元素发送按键
      模拟鼠标悬停点击菜单项

      下面模拟用户用鼠标点击百度顶部菜单“更多”中的“翻译”条目。

      from selenium.webdriver.common.action_chains import ActionChains
      # 获取相关元素
      menu = driver.find_element(By.CSS_SELECTOR, "#s-top-left > div")
      item = driver.find_element(By.CSS_SELECTOR, "#s-top-more > div:nth-child(1) > a")
      # 定义动作链
      actions = ActionChains(driver)
      actions.move_to_element(menu).pause(1).click(item).perform()  # pause(1) 悬停1秒后点击
      
      模拟键盘输入
      from selenium.webdriver.common.keys import Keys
      # 模拟 Ctrl+C
      actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
      

      设置请求参数

      在使用 Selenium 时,有些时候会因为自动化请求而遇到各种问题,或者想优化爬虫脚本,Options 是一个非常重要的工具,用于定制浏览器的各种行为。

      设置无头模式

      在服务器或无界面环境中运行爬虫,避免显式启动浏览器窗口,节省资源。

      from selenium.webdriver.edge.options import Options
      
      options = Options()
      options.add_argument("--headless=new")
      options.add_argument("--disable-gpu")   # 部分系统需禁用 GPU 避免报错
      
      service = Service(executable_path='D:/msedgedriver.exe')
      driver = webdriver.Edge(service=service, options=options)
      
      禁用浏览器弹窗和通知

      网站存在弹窗广告、通知提示(如“允许通知”),干扰自动化操作。

      options.add_argument("--disable-popup-blocking")  # 禁用弹窗拦截
      options.add_argument("--disable-notifications")   # 禁用浏览器通知
      
      设置代理服务器
      options.add_argument("--proxy-server=http://127.0.0.1:8080")
      
      忽略 HTTPS 证书错误

      访问的网站使用自签名证书或存在证书错误,导致浏览器报错。

      options.add_argument("--ignore-certificate-errors")
      
      禁用扩展程序

      浏览器默认安装的扩展(如广告拦截插件)干扰页面加载或元素定位。

      options.add_argument("--disable-extensions")  # 禁用所有扩展
      options.add_argument("--disable-extensions-except=/path/to/extension")  # 通过扩展 ID 禁用某个扩展
      
      调整窗口大小和显示

      需要模拟特定分辨率或最大化窗口。

      options.add_argument("--start-maximized")      # 启动时最大化窗口
      options.add_argument("window-size=1920x1080")  # 设置固定窗口大小
      
      设置反爬虫策略
      options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") # 设置User-Agent
      options.add_argument("--disable-blink-features=AutomationControlled") # 禁用浏览器指纹

👉  更多学习梓料领取方式:只需【立即领取】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值