首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 7.1 Selenium 的使用 #### 引言 在Python网络爬虫的开发实践中,Selenium是一个不可或缺的强大工具。它不同于传统的基于HTTP请求的爬虫方式,Selenium通过模拟真实用户在浏览器中的操作(如点击、滚动、输入等)来与网页进行交互,从而能够处理那些需要JavaScript渲染、动态加载内容或具有复杂防爬机制的网站。本章将详细介绍Selenium的安装、配置、基本使用以及高级应用,帮助读者掌握这一强大的自动化测试与爬虫工具。 #### 7.1.1 Selenium简介 Selenium是一个用于Web应用程序的自动化测试工具集,它直接运行在浏览器中,就像真正的用户在操作一样。Selenium支持多种浏览器(如Chrome、Firefox、Safari等),并且可以跨平台运行。除了用于测试外,由于其能够模拟用户行为,Selenium也被广泛应用于网络爬虫领域,特别是针对那些难以通过传统方式抓取的网站。 #### 7.1.2 Selenium的安装与配置 ##### 安装Selenium库 在Python中,使用Selenium首先需要安装`selenium`库。可以通过pip命令轻松完成安装: ```bash pip install selenium ``` ##### WebDriver的配置 Selenium需要与特定浏览器的WebDriver配合使用,WebDriver是Selenium与浏览器之间的桥梁。不同的浏览器需要下载对应版本的WebDriver,并将其路径添加到系统的环境变量中,或者在代码中直接指定WebDriver的路径。 以Chrome为例,首先需要下载与Chrome浏览器版本相匹配的ChromeDriver。下载完成后,可以通过设置环境变量或在代码中指定路径来配置: ```python from selenium import webdriver # 指定ChromeDriver的路径 driver_path = '/path/to/chromedriver' driver = webdriver.Chrome(executable_path=driver_path) ``` #### 7.1.3 Selenium的基本使用 ##### 启动浏览器 使用Selenium启动浏览器非常简单,只需创建WebDriver对象即可。 ```python from selenium import webdriver driver = webdriver.Chrome() # 假设ChromeDriver已在环境变量中配置 driver.get('http://www.example.com') # 打开网页 ``` ##### 页面元素定位 Selenium提供了多种方法来定位页面上的元素,如id、name、class name、tag name、xpath、css selector等。 ```python # 通过id定位 element_by_id = driver.find_element_by_id('myElementId') # 通过xpath定位 element_by_xpath = driver.find_element_by_xpath('//input[@name="q"]') # 注意:Selenium 4.x后,推荐使用find_element方法,并传递By类作为参数 from selenium.webdriver.common.by import By element = driver.find_element(By.ID, 'myElementId') ``` ##### 元素操作 定位到元素后,可以进行多种操作,如输入文本、点击等。 ```python # 输入文本 element.send_keys('Hello, Selenium!') # 点击元素 element.click() # 获取元素文本 text = element.text ``` ##### 页面等待 在自动化测试中,页面加载速度可能会影响脚本的执行。Selenium提供了显式等待和隐式等待两种机制来处理这一问题。 - **显式等待**:等待某个条件成立时继续执行代码,超时则抛出异常。 ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit() ``` - **隐式等待**:对整个WebDriver实例设置等待时间,一旦设置,它会影响该实例中所有元素定位操作的等待时间。 ```python driver.implicitly_wait(10) # 设置隐式等待时间为10秒 ``` #### 7.1.4 Selenium的高级应用 ##### 处理JavaScript弹窗 Selenium可以处理JavaScript生成的弹窗(如alert、confirm、prompt)。 ```python # 处理alert弹窗 alert = driver.switch_to.alert alert.accept() # 点击确定 # 或 alert.dismiss() # 点击取消 # 处理prompt弹窗 prompt = driver.switch_to.alert prompt.send_keys('some text') prompt.accept() ``` ##### 多窗口处理 在爬虫过程中,可能会遇到需要在新窗口中打开链接的情况。Selenium提供了切换窗口的方法。 ```python # 获取当前窗口句柄 current_window = driver.current_window_handle # 打开新窗口 driver.execute_script("window.open('http://www.newexample.com', '_blank');") # 切换到新窗口 new_windows = [window for window in driver.window_handles if window != current_window] driver.switch_to.window(new_windows[0]) # 回到原窗口 driver.switch_to.window(current_window) ``` ##### 滚动页面 有时候,需要滚动页面以加载更多内容或定位到页面底部的元素。 ```python # 滚动到页面底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 滚动到指定元素位置 element.location_once_scrolled_into_view ``` ##### 截图与日志 在爬虫过程中,可能需要记录页面的截图或WebDriver的日志以便于调试。 ```python # 截图 driver.save_screenshot('screenshot.png') # 设置日志级别和获取日志(以Chrome为例) driver.get_log('performance') # 获取性能日志 ``` #### 7.1.5 实战案例:使用Selenium爬取动态加载的内容 假设我们需要从一个使用Ajax动态加载内容的网站抓取数据。传统的HTTP请求爬虫无法直接捕获这些数据,但使用Selenium可以很容易地模拟用户行为,获取到这些数据。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get('http://www.dynamicwebsite.com') # 等待页面上的某个元素加载完成 wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, 'dynamicContent'))) # 提取数据 data = element.text print(data) # 关闭浏览器 driver.quit() ``` #### 结语 通过本章的学习,我们了解了Selenium的基本概念、安装配置、基本使用以及高级应用。Selenium的强大功能不仅限于网络爬虫,它在自动化测试领域也发挥着重要作用。掌握Selenium的使用,将极大地扩展你的自动化脚本编写能力,无论是进行网页数据的抓取,还是进行自动化测试,Selenium都能成为你的得力助手。
上一篇:
6.3 aiohttp 异步爬取实战
下一篇:
7.2 Splash 的使用
该分类下的相关小册推荐:
Python高性能编程与实战
Python与办公-玩转PPT
Python合辑8-变量和运算符
Python爬虫入门与实战开发(下)
Python合辑14-面向对象编程案例(下)
剑指Python(万变不离其宗)
Python合辑7-集合、列表与元组
Python编程轻松进阶(一)
Python爬虫入门与实战开发(上)
Python编程轻松进阶(四)
剑指Python(磨刀不误砍柴工)
Python机器学习基础教程(上)