我们在使用PIL当中的Image进行图片的截取操作时,经常遇到一个问题,如下所示:
1.比如说我们想要截取当前界面当中的“百度一下按钮”,经常会出现一些问题
2.笔者在这里学习使用的是crop方法,代码如下
from selenium import webdriver
from PIL import Image
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
driver.save_screenshot("./baidu.png")
element = driver.find_element_by_id("su")
print(element.location)
print(element.size)
left = element.location["x"]
top = element.location["y"]
right = element.location["x"] + element.size["width"]
bottom = element.location["y"] + element.size["height"]
img = Image.open('./baidu.png')
img = img.crop((left, top, right, bottom))
img.save("./yixia.png")
在这里我发现我在正确获取图片或者模块在页面得位置之后往往不能截取到对应的图片小图,如下图所示,位置已经完全偏离了。
3.经过探寻得知,是我们电脑显示比例的问题,一般的win10用户喜欢把电脑界面显示比例设置位125%
所以我们需要将屏幕的比例调回100%,或者直接在代码中添加一句:
driver.execute_script('document.body.style.zoom="0.8"')
整体如下:
from selenium import webdriver
from PIL import Image
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
driver.execute_script('document.body.style.zoom="0.8"')
driver.save_screenshot("./baidu.png")
element = driver.find_element_by_id("su")
print(element.location)
print(element.size)
left = element.location["x"]
top = element.location["y"]
right = element.location["x"] + element.size["width"]
bottom = element.location["y"] + element.size["height"]
img = Image.open('./baidu.png')
img = img.crop((left, top, right, bottom))
img.save("./yixia.png")
这样我们会发现整体图就会变小,从而截取小图的时候也就变得格外精确了