小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

本文介绍了Selenium自动化测试框架的基础操作,包括如何使用Selenium控制浏览器执行特定动作,如访问网页、查找DOM节点等,特别适合用于爬取由JavaScript动态渲染的页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人生苦短,我用 Python

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

小白学 Python 爬虫(10):Session 和 Cookies

小白学 Python 爬虫(11):urllib 基础使用(一)

小白学 Python 爬虫(12):urllib 基础使用(二)

小白学 Python 爬虫(13):urllib 基础使用(三)

小白学 Python 爬虫(14):urllib 基础使用(四)

小白学 Python 爬虫(15):urllib 基础使用(五)

小白学 Python 爬虫(16):urllib 实战之爬取妹子图

小白学 Python 爬虫(17):Requests 基础使用

小白学 Python 爬虫(18):Requests 进阶操作

小白学 Python 爬虫(19):Xpath 基操

小白学 Python 爬虫(20):Xpath 进阶

小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

小白学 Python 爬虫(22):解析库 Beautiful Soup(下)

小白学 Python 爬虫(23):解析库 pyquery 入门

小白学 Python 爬虫(24):2019 豆瓣电影排行

小白学 Python 爬虫(25):爬取股票信息

小白学 Python 爬虫(26):为啥买不起上海二手房你都买不起

引言

前面连续几篇爬虫实战不知道各位同学玩的怎么样,小编是要继续更新了,本篇我们来介绍一个前面已将安装过的工具: Selenium ,如果说是叫爬虫工具其实并不合适,在业界很多时候是拿来做自动化测试的,所以本篇的标题也就叫成了自动化测试框架。

至于为什么叫这个名字我们就不去深究了,老外起名字的想象力还是相当可以的。

它可以通过驱动程序驱动浏览器执行特定的动作,这个特性对我们爬取由 JavaScript 动态渲染的页面是非常友好的。

因为由 JavaScript 动态渲染的页面,这种页面上的 JavaScript 通常经过了编译打包,看到的都是简码,非常难以阅读。

其实他们编译打包的目的就是不想让别人看,但是由于浏览器的特性由所有人都看得到,这个就比较尴尬了。。。

比较常见的打包方式有 webpack 打包等等。

有感兴趣的同学可以在留言区留言,人多的话小编后续可以分享一些前端的内容。

前置准备

在开始之前,如果还没安装过环境的同学建议还是翻一翻前面你的文章,先把环境搞定。

请确认自己已经安装了 Chrome 浏览器并且也已经正确的配置了 ChromeDriver ,然后还需要正常的安装了 Selenium 库。

首先,还是官方网址敬上:

官方文档:https://selenium.dev/selenium/docs/api/py/api.html

有任何问题找官方,看不懂可以使用翻译软件。

基础操作

以上前置准备都 ok 了以后,我们开始了解一下 Selenium 的一些基础操作把。先写一点简单的小功能演示一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('极客挖掘机')
input.send_keys(Keys.ENTER)
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)

运行以上代码,可以看到自动弹出来一个 Chrome 浏览器,并且上面标示了: Chrome 正受到自动软件的控制 。然后打开了百度,在输入框中输入了 “极客挖掘机” 进行搜索。

再搜索结果出来后控制台打印了当前的 URL 、 cookies 和网页的源代码。

控制台的运行结果就截个图吧,内容太长就不贴了。

可以看到, Selenium 拿到的内容,都是真实展示在浏览器中的内容。由 JavaScript 动态加载的页面生成的 DOM 节点在 Selenium 下也无所遁形。

这个很好解释,因为 Selenium 是直接拿到的浏览器展示的内容。

声明浏览器对象

Selenium 支持非常多的浏览器,如:

from selenium import webdriver

# 声明浏览器对象,需对应的驱动程序方可使用
browser = webdriver.android()
browser = webdriver.blackberry()
browser = webdriver.chrome()
browser = webdriver.edge()
browser = webdriver.firefox()
browser = webdriver.ie()
browser = webdriver.opera()
browser = webdriver.phantomjs()
browser = webdriver.safari()

可以看到有我熟悉的 IE 浏览器、 Edge 浏览器、 FireFox 浏览器、 Opera 浏览器等等。

访问网页

访问网页可以使用 get() 方法,参数传入我们想要访问的网站即可:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
print(browser.page_source)

通过上面两行代码,我们可以看到自动打开了浏览器并访问的京东,在控制台打印了京东的源代码。

当然,如果想要程序自动关闭浏览器的话可以使用:

browser.close()

这句话加在上面可以看到浏览器打开后访问京东一闪而过就关掉了。

查找单个节点

我们获取到网页后,第一步肯定是要先查找到 DOM 节点啊,然后可以直接从 DOM 节点中获取数据。

不过有了 Selenium 以后,我们不仅可以查找到节点获取数据,还可以模拟用户操作,比如在搜索框输入某些内容,点击按钮等等操作,不过还是先看看怎么查找节点:

从上面这张图可以看到,我们想要获取输入框,可以通过 id 进行获取,那么我们接下来的代码要这么写:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key = browser.find_element_by_id('key')
print(input_key)

结果如下:

<selenium.webdriver.remote.webelement.WebElement (session="86d1ae1419bee22099a168dfbf921a27", element="53047804-ad39-4dfd-b3fb-a149fb1c8ac8")>

可以看到,我们获得的元素类型是 WebElement 。

小编这里顺手列出所有的获得单个节点的方法:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

此外, selenium 还未我们提供了一个通用方法 find_element() ,它需要传入两个参数:查找方式 By 和值。实际上上面示例中的查找方式还可以这么写(效果完全一样哦~~~):

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key1 = browser.find_element(By.ID, 'key')
print(input_key1)

结果小编就不贴了,各位同学可以自己运行下进行对比。

查找多个节点

比如我们要查找左边的这种导航条的所有条目:

可以这么写:

lis = browser.find_elements_by_css_selector('.cate_menu li')
print(lis)

结果如下:

[<selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="8e0d1a8c-d5dc-4b1f-8250-7f0eca864ea7")>, <selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="15cd4dc9-42f4-4ed7-9258-9aa29073243c")>, 
......]

太多了,小编后面的结果就省略掉了。

下面列出来所有的多节点选择的方法:

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

同样,多节点选择也有一个 find_elements() 的方法,小编这里就不展示,各位同学自己试一试。

本篇先到这里,下一篇我们接着介绍交互操作。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

示例代码-Gitee

参考

https://selenium-python.readthedocs.io/api.html

https://cuiqingcai.com/5630.html

您的扫码关注,是对小编坚持原创的最大鼓励:)
<think>嗯,用户之前问过后端系统安全性的问题,现在转向如何从零开始Python,并以优快云为例规划习路线。这说明用户可能是一个刚开始习编程的新手,或者想转行进入技术领域。需要先确定用户的基础,比如是否有其他编程经验,但用户自称“小白”,所以需要从最基础的内容开始规划。 用户提到优快云,可能他们习惯中文资源,或者已经在优快云上找到了一些资料。优快云有很多教程和博客,但质量参差不齐,需要引导用户筛选优质内容。同时,用户可能需要一个结构化的习路径,而不仅仅是零散的教程。 首先,Python的基础语法是必须的,比如变量、数据类型、流程控制等。这部分需要推荐具体的文章或课程,可能包括优快云上的入门系列教程。然后是进阶内容,比如函数、模块、文件操作,接着是面向对象编程,这些是构建更复杂程序的基础。 接下来,用户可能需要实际应用,比如数据处理、Web开发或自动化脚本。考虑到Python在数据科和Web开发中的广泛应用,应该涵盖这些方向的习资源。同时,项目实战非常重要,通过实际项目巩固知识,比如爬虫、数据分析、Flask/Django项目等。 另外,用户可能希望了解如何利用优快云社区,比如提问、参与活动、关注专家等,这些能帮助他们解决习中的问题并保持动力。持续习部分,推荐进阶方向和认证考试,帮助用户规划长期习路径。 需要注意的是,用户可能在习过程中遇到困难,比如环境配置、错误调试等,所以要强调实践和社区支持的重要性。同时,提醒用户注意选择高质量的教程,避免被过时或错误的内容误导。最后,鼓励用户坚持习,并参与实际项目,以提升技能。</think>以下是为Python小白规划的优快云习路线,分为6个阶段并标注重点技能树,采用$$...$$格式突出核心公式: --- ### **阶段一:基础语法筑基 (2-4周)** $$编程能力_{基础} = 环境配置 + 语法规则 + 调试能力$$ 1. **环境搭建** - 优快云搜索《Python安装与环境配置超详细教程》 - 安装Python3.10+与PyCharm社区版 - 验证安装:终端输入`$ python --version` 2. **基础语法** - 数据类型: ```python int_num = 10 # 整数 float_num = 3.14 # 浮点数 str_val = "优快云" # 字符串 ``` - 推荐教程: - 《Python零基础入门:30天速成手册》 - 《Python条件判断与循环语句详解》 3. **实战小项目** - 实现:计算器、猜数字游戏 - 调试技巧:用`print()`输出中间变量 --- ### **阶段二:进阶编程能力 (3-5周)** $$编程能力_{进阶} = 函数 \times 文件操作 \times 异常处理$$ 1. **函数与模块** - 习:参数传递、返回值、`lambda`表达式 - 案例: ```python def factorial(n): return 1 if n==0 else n*factorial(n-1) ``` 2. **文件操作** - 掌握:`open()`的`r/w/a`模式 - 教程推荐: 《Python文件读写操作全解析》 3. **异常处理** - 代码模板: ```python try: file = open("data.txt") except FileNotFoundError as e: print(f"错误:{e}") ``` --- ### **阶段三:面向对象与数据结构 (4-6周)** $$OOP_{掌握度} = 类 \times 继承 \times 多态$$ 1. **类与对象** - 实现:生管理系统类 ```python class Student: def __init__(self, name): self.name = name ``` 2. **数据结构** - 重点:列表推导式、字典操作 - 文章推荐: 《Python高级数据结构技巧10例》 --- ### **阶段四:应用领域拓展 (6-8周)** $$应用能力 = \sum_{i=1}^{n}(库_{i} \times 项目_{i})$$ 1. **数据处理方向** - 习:`numpy`矩阵运算、`pandas`数据分析 - 教程: 《Pandas数据分析实战:从Excel处理到可视化》 2. **Web开发方向** - 框架:Flask/Django - 案例: ```python from flask import Flask app = Flask(__name__) ``` 3. **自动化方向** - 工具:`selenium`网页自动化、`os`模块文件管理 --- ### **阶段五:项目实战 (持续进行)** $$项目_{价值} = 复杂度 \times 创新性 \times 文档完整性$$ 1. **推荐项目** - 初级:天气查询工具、词频统计程序 - 中级:电商数据分析系统、博客网站 - 高级:基于机器习的股票预测模型 2. **优快云资源** - 搜索《Python实战项目200例》 - 参与“优快云编程竞赛”活动 --- ### **阶段六:持续习与社区互动** $$成长速度 = 习_{频率} \times 实践_{强度} \times 交流_{深度}$$ 1. **优快云使用技巧** - 关注标签:#Python实战 #算法 - 关注大V:廖雪峰、吴恩达(中文内容) - 每日刷“Python热榜”文章 2. **习建议** - 每天至少写50行代码 - 参与开源项目(GitHub+优快云联动) - 遇到问题先用《Python常见错误解决方案大全》 --- ### **习路线图总结** ``` 基础语法 ↓ 函数与模块 ↓ 面向对象编程 ↓ ┌─数据处理←┐ ├─Web开发─┤ → 项目实战 └─自动化──┘ ↓ 算法与设计模式 ``` **注意事项**: - 避免只看不写,代码量建议达到$$代码量_{标准}=10k行$$ - 善用优快云“代码片段”功能收藏优质示例 - 遇到难题时用“提问模板”高效求助
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客挖掘机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值