上一篇: 一起学爬虫(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~