一起学爬虫(Python) — 24 自动化详解3

本文是Python爬虫Selenium系列的第三篇,详细讲解如何使用Selenium进行点击指定位置和截取指定位置图片的操作。通过实例解析Selenium的实用技巧,帮助读者更好地理解和应用Selenium。
摘要由CSDN通过智能技术生成

上一篇: 一起学爬虫(Python) — 23 自动化详解2

如果小可爱是刚来的呢,不妨先点开上面的康一康,有好东西哦~

在这里插入图片描述

前言

勤奋的我,又出现啦,这里呢给少数(不几个)粉丝,就是那种不喜欢白嫖的,然后元气满满,能提供很多素材,或者提供很多想法的小粉丝们,建了一个群,想进来呢,需要你点赞点赞点赞~

也就是全部点赞!

在这里插入图片描述

咳咳,不是骗赞哦,这个群呢,大家可以当做是聊天群,主要是活跃气氛,然后…学习的路上有人一起的话,也不孤单嘛,而且现在有很多群都是为了利益,加进去只能感受到冰冷的现实,所以呢,快来这里的温暖小窝吧!

在这里插入图片描述
在这里插入图片描述

看这里看这里!

这一篇呢,就继续给大家深入的讲解selenium的各种用法哈,其实原本小泽是想通过实践来让大家更好地理解每一句,每一行,但是呢,还是先弄一个类似于差不多字典的东西,我这里说的字典是新华字典那种哦,不是python里的字典,不要学的走火入魔了!

在这里插入图片描述
方便大家日后查阅嘛~

这里呢,就补充一些前面没有讲到的,但是大家可能会用到的东西吧!

为了方便查阅,就采用标题来当索引。

点击指定位置

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
 
# 实例化一个浏览器对象,传入浏览器驱动程序的路径
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 让浏览器打开指定url界面
driver.get('https://www.baidu.com')
# 鼠标左键点击
ActionChains(driver).move_by_offset(x, y).click().perform() 
# 鼠标右键点击
ActionChains(driver).move_by_offset(x, y).context_click().perform() 

这里是根据我们的x,y坐标进行点击的哦,这个要怎么看呢,大家可以用qq上的截图,或者随便找个截图,然后从浏览器最左上角开始截图,一直到你要点的地方,就能从截图的那个页面看到x和y,也就是宽度和高度。

但是注意,每一次点击之后,鼠标都是停在当前点击完的这个地方,也就是说如果需要下次再点击,我们需要给鼠标位置进行一个还原。

# 鼠标左键点击
ActionChains(driver).move_by_offset(-x, -y).click().perform() 
# 鼠标右键点击
ActionChains(driver).move_by_offset(-x, -y).context_click().perform() 

还有就是,要从这个页面的左上角开始截图哦。

在这里插入图片描述
就比如我们要点击这个热搜榜第一的,就这样截图看一下她的大概位置,然后把这个坐标放进去就可以了。

当然如果你没有最大化的话,页面另一边的你是点不到的,这个就是移动我们的鼠标去点的,所以最好是先进行一个最大化。

# 最大化
driver.maximize_window()

截取指定位置图片

这里并不是直接截取你需要的那部分图片哦,selenium目前还没有那么神通广大,我们的一般处理思路呢,是全对全部页面进行一个截取,然后再根据坐标来进行裁剪。

在这里插入图片描述
就比如我们如果要截取上面的图片的话,大家可以通过获得她左上角和右下角的坐标,来确定她的大小。

不要告诉我不理解,这个是最简单的数学诶。

在这里插入图片描述
举个例子,我们需要对验证码进行一个裁剪下来,然后把她给第三方验证平台。

那就得先确定她的左上角,也就是相对位置。

可以理解为页面的左上角是一个原点,横着是x轴,竖着是y轴,然后在里面找坐标。

# 对当前页面进行截图
driver.save_screenshot('a.png')

# 确定裁剪的区域,根据元素定位,也就是标签,如果在需要截取的位置固定的情况下可以直接跳过下面部分
img_ele = driver.find_element_by_xpath('')

# location是取得该元素的相对位置,相对于左上角的角角
x,y =[img_ele.location[key] for key in img_ele.location]

# 如果不能理解的话,就都打印一下康康
print('img_ele.location:',img_ele.location)
print('x:',x)
print('y:',y)

这里再进行一次强调哦,driver是我们自己设置的,点后面的是方法,是函数自己带的,就好比你知道1+1=2,但是你知道她为什么等于2吗?

听懂掌声!

在这里插入图片描述
那个by_xpath里面写你要截取的元素的xpath,或者你也可以根据id,class等这些标签属性来找对吧,方法是很多的。

# location是取得该元素的相对位置,相对于左上角的角角
x,y =[img_ele.location[key] for key in img_ele.location]

# 等同于下面的写法哦
a = img_ele.location
x = a['x']
y = a['y']

# 也等同于下面的写法哦
for key in img_ele.location:
	print(img_ele.location['key'])

弄完上面那些,我们就有了图片的相对位置,也就是左上角,还有她的长和宽,对吧。

在这里插入图片描述
弄成代码就是这样子:

# size是取得该元素的宽和高
height,width =[img_ele.size[key] for key in img_ele.size]
print('img_ele.size:',img_ele.size)
print('height:',height)
print('width:',width)

# 左上角和右下角坐标
rangle = (int(x), int(y), int(x + width), int(y + height))

size呢,就是获取该元素的宽和高啦,先宽后高哦。

方便我们进行相加嘛~

现在,我们已经有了整个页面的截图,还有我们需要的部分的相对坐标,剩下的就是裁剪了!

# 我们需要用到的裁剪工具
from PIL import Image

# 左上角和右下角坐标
rangle = (int(x), int(y), int(x + width), int(y + height))

# 打开一张图片
i = Image.open('./a.png')
# 根据指定区域进行图片裁剪
frame = i.crop(rangle)
# 进行保存
frame.save('./crop.png')

这样的话,我们裁剪后的图片就保存到了本地!

但是我们只需要裁剪后的图片嘛,所以呢,这里就把之前截的全部页面的图片给删掉。

import os

# 删除文件
os.remove('./a.png')

okk,那么关于截取指定区域的教程也结束了,也许你会问这个能干啥用,如果你有一个图片处理的项目,是不是就能自动处理这些图片,然后根据图片来判断是否进行下一步,或者该做什么。

还有很多第三方的图片识别平台,也可以帮我们做到自动识别图片,然后自动进行判断。

在这里插入图片描述

结尾

目前还没有想到什么大家需要的,所以说如果你是一直在看的话,赶紧点赞点赞,然后加到铁粉群,把你的意见,想法,跟大家一起交流,然后小泽就有了更新的素材嘛~

不知道写什么…

目前还没到干饭的时间。

枯燥。

打开网抑云…

各位886~

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值