zoukankan      html  css  js  c++  java
  • Win10下用selenium、Image.crop() 截图时、坐标不准确的问题

    截百度按钮的图




    先将整个窗口的图保存下来

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    element = driver.find_element_by_xpath('//input[@id="su"]')
    # 坐标
    print(element.location)
    # 大小
    print(element.size)
    #    把当前窗口截图保存
    driver.get_screenshot_as_file('1.png')
    




    正常情况下,直接根据图片的坐标和大小,将对应参数给到crop()

    from PIL import Image
    
    image = Image.open('1.png')
    x = 738
    y = 220
    im = image.crop((x, y, x + 100, y + 36))
    im.show()
    



    结果却是这样?



    看这内容,只截到“度”字,距离目标还有这么长一截




    原因是自己电脑缩放与布局(桌面右键、显示设置)用的125%为推荐设置





    方法一:把这个设置调回100%即可准确截图

    方法二:在给crop()参数的时候,全部乘以对应的比列也能准确截图

    from PIL import Image
    
    image = Image.open('1.png')
    x = 738 * 1.25
    y = 220 * 1.25
    im = image.crop((x, y, x + 100 * 1.25, y + 36 * 1.25))
    im.show()
    

    方法三:执行js,对页面进行缩放

    • document.body.style.zoom="1.5"
    import time
    from io import BytesIO
    from PIL import Image
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    try:
        driver.get('https://www.baidu.com/')
        # 执行js,对页面进行缩放,100 占 125 的 80%
        driver.execute_script('document.body.style.zoom="0.8"')
        # 要截图的元素
        element = driver.find_element_by_xpath('//input[@id="su"]')
        # 坐标
        x, y = element.location.values()
        # 宽高
        h, w = element.size.values()
        # 把截图以二进制形式的数据返回
        image_data = driver.get_screenshot_as_png()
        # 以新图片打开返回的数据
        screenshot = Image.open(BytesIO(image_data))
        # 对截图进行裁剪
        result = screenshot.crop((x, y, x + w, y + h))
        # 显示图片
        result.show()
    finally:
        time.sleep(10)
        driver.quit()
    




  • 相关阅读:
    Android执行时ART载入OAT文件的过程分析
    Oracle GoldenGate 支持 从SAP HANA database抽取或者复制数据到SAP HANA database 吗?
    【机房收费系统C#版】——导出Excel
    【STL容器学习】-关联容器与map的用法
    IOS
    使用Android Studio 1.3 版本号进行NDK开发
    4443: [Scoi2015]小秃玩矩阵|二分答案|匈牙利
    多版本号并发控制(MVCC)在实际项目中的应用
    memcached远程 telnet 无法连接,解决方案
    Memcached 服务器端命令
  • 原文地址:https://www.cnblogs.com/jiyu-hlzy/p/12155738.html
Copyright © 2011-2022 走看看