26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

这篇具有很好参考价值的文章主要介绍了26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

什么是selenium?

配置selenium

安装selenium库

安装浏览器驱动(以Chrome为例) 

使用selenium库

例1:实现打开网页拿取网页标题

运行效果

例2:实现抓取某招聘网站Python岗位的职位信息

运行效果

例3:实现抓取推荐新闻的标题和正文(涉及子页面的切换)

运行效果

例4:处理iframe内联框架(视频播放器、表格数据等常见)

运行效果

例5:“无头浏览器”,即浏览器在后端运行抓取数据,效果等同低效率的爬虫程序

运行效果

总结


前言

爬虫走到今天,我们已经学习过不少方法,来解析网页源代码、抓包、审查元素、加密解密......但是我们有时会不会这样想:可不可以直接拿到浏览器直接显示的信息呢???

因为我们经常看到,数据明明就摆在我们浏览器的页面上,但是苦于源代码的空洞,我们不得不翻箱倒柜的去找json,去找js请求等等。很多时候数据特别隐蔽,令人十分崩溃,有时甚至会想直接在浏览器CV了之!

所以,有想法,那就解决!你不是能显示在浏览器上吗?你不是能CV不能截取信息吗?OK,我让Python自动帮我运行浏览器,拿我想要的内容selenium就这样应运而来了。


什么是selenium?

来自百度百科:

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。

由上述简介可得,selenium可以帮助我们自动打开浏览器运行打开想要的网页,并且模仿人的CV操作、输入操作等,进而获取一大堆我们需要的信息。


配置selenium

selenium需要两方面,第一个当然就是安装对应的库,而另一方面就是要安装浏览器对应的驱动程序,并移动到Python解释器所在路径。

安装selenium库

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

安装就很简单了,直接在Terminal中pip install selenium,当然在cmd里、anaconda里都是一样的

安装浏览器驱动(以Chrome为例) 

1. 访问ChromeDriver - WebDriver for Chrome - Downloads (chromium.org)

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

2. 根据自己Chrome浏览器的版本号选择驱动文件(找不到就向下取最接近的,比如你是109.0.9,但是没有,那就下载109.0.5,一般都是向下兼容的) 

如何查看浏览器版本号?

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

按上图所示,点击关于Google Chrome,弹出以下界面:

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)这里显示的就是版本号了,依据这个到第一点所说的网站里去选驱动,这里我根据版本号选择109版本的:

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

由于我是Windows系统,所以选择第四个,mac的同学自行选择前面对应的

(别担心,32位64位都可选win32,再说也没win64选项嘛

 3. 下载解压

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

如图所示,解压出来是两个文件,将它们剪切,粘贴到Python解释器所在路径。

不知道解释器在哪里? 

1. 如果你是Anaconda虚拟环境,直接去“Anaconda3/envs/虚拟环境名”路径就行

2. 其他渠道环境:只需要在PyCharm或者其他软件里运行一下就看得到解释器位置了:

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

复制进去,配置完毕。(我的是Anaconda环境,仅供参考)

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)


使用selenium库

例1:实现打开网页拿取网页标题

from selenium import webdriver

# 让selenium启动谷歌浏览器
# 1.创建浏览器对象
# 设置
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
options.add_argument('--start-maximized')  # 浏览器窗口最大
web = webdriver.Chrome(options=options)

# 2.打开一个网址
web.get("http://www.baidu.com")

print(web.title)

由于当前Python3.8版本会默认在执行完任务后关闭浏览器,我们如果想看效果会转瞬即逝,所以我们需要配置一下webdriver:

第一项就是控制执行完毕以后不关闭浏览器窗口,第二项就是让浏览器弹出时是最大化窗口。

运行效果

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

可以看到效果是非常成功的,浏览器自动运行了,并且输出了期望结果,也说明环境搭建成功。

例2:实现抓取某招聘网站Python岗位的职位信息

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

import time

# 让selenium启动谷歌浏览器
# 1.创建浏览器对象
# 设置
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
options.add_argument('--start-maximized')  # 浏览器窗口最大
web = webdriver.Chrome(options=options)

# 2.打开一个网址
web.get("http://lagou.com")

# 找到某个元素. 点击它
el = web.find_element(By.XPATH, '//*[@id="changeCityBox"]/ul/li[1]/a')
el.click()  # 点击事件

time.sleep(1)  # 让浏览器缓一会儿

# 找到输入框. 输入python  =>  输入回车/点击搜索按钮
web.find_element(By.XPATH, '//*[@id="search_input"]').send_keys("python", Keys.ENTER)

time.sleep(1)

# 查找存放数据的位置. 进行数据提取
# 找到页面中存放数据的所有的li
item_list = web.find_elements(By.XPATH, '//*[@id="jobList"]/div[1]/div')
for item in item_list:
    job_name = item.find_element(By.XPATH, "./div[1]/div[1]/div[1]/a").text
    job_price = item.find_element(By.XPATH, "./div[1]/div[1]/div[2]/span").text
    company_name = item.find_element(By.XPATH, './div[1]/div[2]/div[1]/a').text
    print(company_name, job_name, job_price)

这里结合了XPath的知识,我们只需要根据在当前页面的操作,然后在审查元素中找到对应的XPath路径,套入函数就可以了。

我们是要先点击选择所在城市,然后输入要搜索的文本(python),最后获取页面中存放数据的所有li,打印输出即可。

这里只是一个粗糙的例子,目的是为了让大家了解selenium的功能,完善这个小项目大家可以自己动手试一试,后面有时间的话我也会写一写补充下来。

运行效果

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

可以看到也是成功抓取到了,更加细化的工作交给大家来完成,我就不赘述了。

例3:实现抓取推荐新闻的标题和正文(涉及子页面的切换)

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

import time

# 让selenium启动谷歌浏览器
# 1.创建浏览器对象
# 设置
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
options.add_argument('--start-maximized')  # 浏览器窗口最大
web = webdriver.Chrome(options=options)


# 2.打开一个网址
web.get("http://tuijian.hao123.com/")

# 拿到新闻标题
news_header = web.find_element(By.XPATH, '//*[@id="sdIndex"]/ul/li[1]/a/span').text
# 点击进入首页推荐的第一个横幅新闻
web.find_element(By.XPATH, '//*[@id="sdIndex"]/ul/li[1]/a/span').click()

time.sleep(1)

# 进入到进窗口中进行提取
# 注意, 在selenium的眼中. 新窗口默认是不切换过来的!
web.switch_to.window(web.window_handles[-1])

# 在新窗口中提取内容
news_detail = web.find_element(By.XPATH, '//*[@id="main-content"]/div[1]/div/div[2]').text
print(news_header)
print(news_detail)

time.sleep(1)

# 关掉子窗口
web.close()
# 变更selenium的窗口视角. 回到原来的窗口中
web.switch_to.window(web.window_handles[0])
print(web.title)

这个就和上一个例子大同小异,最大的不同点就在于新闻内容是在子页面获取的,并且获取完毕以后切换回了主页面,可以继续爬取其他新闻。

这里使用的是web.switch_to.window这个api,用web.window_handles[num]来代指第num+1个浏览器标签页。

运行效果

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

 26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

成功拿到了想要的数据,这个自动化的过程还是非常有B格的!

例4:处理iframe内联框架(视频播放器、表格数据等常见)

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

import time

# 如果页面中遇到了 iframe如何处理
web.get("https://www.csdn.net/?spm=1010.2135.3001.4476")
time.sleep(3)

# 处理iframe的话. 必须先拿到iframe. 然后切换视角到iframe . 再然后才可以拿数据
iframe = web.find_element(By.XPATH, '//*[@id="kp_box_589"]/iframe')
web.switch_to.frame(iframe)  # 切换到iframe
time.sleep(1)
print(web.find_element(By.XPATH, '//*[@id="1001319"]/div/div/span').text)
web.switch_to.default_content()  # 切换回原页面
time.sleep(1)
print(web.find_element(By.XPATH, '//*[@id="www-home-right"]/div[1]/div[1]/div[2]/div/span').text)

以我们C站的主页与广告栏为例,我们可以看到已经可以成功切换进广告栏(iframe)并且切出来

运行效果

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)


例5:“无头浏览器”,即浏览器在后端运行抓取数据,效果等同低效率的爬虫程序

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
import time

# 准备好参数配置
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")

web = Chrome(options=opt)  # 把参数配置设置到浏览器中

web.get("https://www.endata.com.cn/BoxOffice/BO/Year/index.html")

time.sleep(2)

# 定位到下拉列表
sel_el = web.find_element(By.XPATH, '//*[@id="OptionDate"]')
# 对元素进行包装, 包装成下拉菜单
sel = Select(sel_el)
# 让浏览器进行调整选项
for i in range(len(sel.options)):  # i就是每一个下拉框选项的索引位置
    sel.select_by_index(i)  # 按照索引进行切换
    time.sleep(2)
    table = web.find_element(By.XPATH, '//*[@id="TableList"]/table')
    print(table.text)  # 打印所有文本信息
    print("===================================")

print("运行完毕.  ")
web.close()


# 如何拿到页面代码Elements(经过数据加载以及js执行之后的结果的html内容)
print(web.page_source)

其实“无头”的实现很简单,也是通过配置浏览器接口的设置参数headless就是不显示页面,disable-gpu就是为了节约算力,不去调用gpu资源。

其余代码很明显,按部就班获取XPath,然后拿到对应的数据即可。

这里涉及到一个下拉菜单的知识点,我们先用XPath定位到这个元素,随后用Select接口将其包装成下拉菜单元素就可以让selenium将其识别了,从而进行一系列切换操作。注意切换以后一定要等待几秒钟,否则数据加载不全就完了。

运行发现我们所需要的电影票房记录已经全部按年份拿到了:

运行效果

26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)


总结

通过本节学习,我们认识了selenium模块并用它写了五个可完善的实例,让自动化测试工具代替爬虫繁琐的解密抓包等过程,在特定场景下是有奇效的。文章来源地址https://www.toymoban.com/news/detail-439460.html

到了这里,关于26. selenium:浏览器自动测试模块——一款方便且能装X的爬虫工具(附多个实例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium浏览器自动化测试框架详解_selenium 测试框架介绍

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月25日
    浏览(56)
  • python自动化测试selenium浏览器操作

    2024年02月16日
    浏览(74)
  • selenium浏览器自动化测试【基于java】

    Selenium 是一个用于Web应用程序的自动化测试工具。它直接运行在浏览器中,可以模拟用户在浏览器上面的行为操作。 chrome.exe 默认安装位置:C:Program FilesGoogleChromeApplicationchrome.exe 结果我的在:C:Users91073AppDataLocalGoogleChromeApplicationchrome.exe 。。。为啥? 下载驱动 最新

    2024年02月04日
    浏览(52)
  • Selenium浏览器自动化测试框架简单介绍

    目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器 介绍 Selenium [1]  是一个用于Web应用程序测试的工具。Selenium测试直接运行在

    2024年02月13日
    浏览(40)
  • Selenium教程:自动化浏览器测试工具

    Selenium是一款用于自动化浏览器测试的工具,它提供了一系列的API和功能,使得开发人员可以编写脚本来模拟用户在浏览器中的行为。无论是在Web应用程序的功能测试、性能测试还是数据抓取方面,Selenium都是一个强大且广泛使用的工具。 在开始使用Selenium之前,您需要进行安

    2024年02月07日
    浏览(82)
  • 【软件测试/自动化测试】WebDriver+Selenium实现浏览器自动化

    前言 使用场景 原理 环境准备  开发 First Script WebDriver API 浏览器 元素 总结 Selenium是一款可以自动化操作浏览器的开源项目,最初的目的是浏览器功能的自动化测试,但是随着项目的发展,人们根据它的特性也用来做一些更多的有意思的功能而不仅仅是UI的自动化测试工具。

    2024年02月08日
    浏览(82)
  • Edge浏览器做web自动化测试(selenium)

    查看浏览器设置看edge浏览器版本   下载edge浏览器对应版本驱动 Microsoft Edge WebDriver - Microsoft Edge Developer   下载完毕后压缩包    后面请参考selenium使用 selenium自动化测试(初窥门径)_邓霖涛的博客-CSDN博客 在导入selenium的maven 相关依赖可以用选择edge的驱动   测试代码如下:  执

    2024年02月12日
    浏览(43)
  • 软件测试/测试开发丨Selenium Web自动化多浏览器处理

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27185 用户使用的浏览器(firefox,chrome,IE 等) web 应用应该能在任何浏览器上正常的工作,这样能吸引更多的用户来使用 是跨不同浏览器组合验证网站或 web 应用程序功能的过程 是兼容性测试的一个

    2024年02月09日
    浏览(64)
  • UI自动化测试之selenium工具(浏览器窗口的切换)

    1、在浏览网页的时候,有时点击一个链接或者按钮,会弹出一个新的窗口。这类窗口也被称之为句柄(一个浏览器窗口的唯一标识符,通过句柄实现不同浏览器窗口之间的切换),在我们手动控制浏览器的时候,产生新的句柄时浏览器会自动的帮我们跳转到最新的句柄处(鼠

    2024年02月02日
    浏览(51)
  • Selenium浏览器交互原理与应用,玩转Web自动化测试

      目录  前言: 浏览器交互: Selenium的实现方式: Selenium WebDriver: WebDriver的等待机制: 总结:  Web自动化

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包