自动网页截图并指定元素位置裁剪图片并保存到excel表格

# coding=utf-8
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from PIL import Image
import xlsxwriter, xlrd
import pandas as pd


def login():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options)
    driver.set_window_size(1200, 741)
    driver.implicitly_wait(2)
    print('初始化中...')
    driver.get("http://xxxve")
    print('填写登录信息中...')
    acc = driver.find_element_by_id('login-email')
    pwd = driver.find_element_by_id('login-pass')
    btn = driver.find_element_by_tag_name('button')
    acc.send_keys('zhxxxm')
    pwd.send_keys('LONxxxxx$')
    btn.click()
    print('跳转到验证码页面中...')
    time.sleep(2)
    capta = driver.find_element_by_id('code')
    capta_input = input('请输入两步验证码:')
    capta.send_keys(capta_input)
    btn1 = driver.find_element_by_tag_name('button')
    btn1.click()
    time.sleep(2)
    print('跳转到创意编辑页面中...')
    return driver


faild_url = []


def parse_img(driver, url):
    cid = url.split('/')[-2]
    try:
        driver.get_screenshot_as_file("./screen_shot/{}.png".format(cid))
        element = driver.find_element_by_class_name("AdvertViewer-item")
        # 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']

        im = Image.open("./screen_shot/{}.png".format(cid))
        im = im.crop((left, top, right, bottom))
        im.save("./screen_shot/{}.png".format(cid))
        print("创意-->{}.png 已经保存".format(cid))
    except Exception as e:
        faild_url.append(url)


def get_screen(driver, url, tem):
    try:
        driver.get(url)
        time.sleep(10)
        parse_img(driver,url)

    except Exception as e:
        print(e, url)
        faild_url.append(url)


def new_xlsx():
    # 打开excel文件
    data = xlrd.open_workbook('全xxx意.xlsx')
    book = xlsxwriter.Workbook('全行xxx意-fina.xlsx')
    # 获取第一张工作表(通过索引的方式)
    tables = data.sheets()
    for table in tables:
        worksheet = book.add_worksheet(table.name)
        nrows = table.nrows

        # 表头
        rows = table.row_values(0)
        for i, v in enumerate(rows):
            if v != '':
                worksheet.write(0, i, v)
        # 表体
        for k in range(1, nrows - 1):
            rows = table.row_values(k)
            for i, v in enumerate(rows):
                if v != '':
                    if str(int(rows[6])) + '.png' in os.listdir('./screen_shot/'):
                        image_width, image_height = Image.open('./screen_shot/' + str(int(rows[6])) + '.png').size
                        worksheet.set_column('H:H', width=58)
                        worksheet.set_row(k, height=image_height*0.8)
                        if i == 7:
                            worksheet.insert_image('H' + str(k + 1), './screen_shot/' + str(int(rows[6])) + '.png',
                                                   {'x_offset': 6, 'y_offset': 3})
                        else:
                            worksheet.write(k, i, v)
                    else:
                        worksheet.write(k, i, v)

    book.close()


if __name__ == '__main__':
    df = pd.read_excel('./全行xxxx.xlsx')
    driver1 = login()
    link_list = df['link'].tolist()
    tem_list = df['样式'].tolist()
    dict_url = zip(link_list, tem_list)

    for url, tem in dict_url:
        count = 1
        get_screen(driver1, url, tem)
        count += 1
        print('还剩 %s 个' % str(len(link_list) - count))
    driver1.quit()

    print('失败的url:', faild_url)
    print('所有抓取结束')
    new_xlsx()
    print('插入表格结束')

 

转载于:https://www.cnblogs.com/Erick-L/p/9390238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【课程内容】所涉及的具体内容包括输入录入技巧、排序、筛选、函数公式、数据透视表、图表、汇总等功能应用,并结合大量的企业应用实例,以互动的方式将解决思路和操作过程逐一呈现。【课程特点】1、190节大容量课程:包含了Excel软件的大部分知识点;2、创新的教学模式:手把手教您电子表格,一看就懂,一学就会;3、完美贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;4、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您宝贵的时间;5、视频短小精悍:即方便于您的学习和记忆,也方便日后对功能的检索;【互动教程的特点】•互动性-首创互动式学习,不同于以往的任何一种学习方式,不看视频不看书,轻松,高效,好玩-手把手教学,一步步引导操作,实时看到效果,就像自己在操作一样,信心满满-即点即学,课程内可根据自己的需要,随时调整界面上方进度条,重复操作,加强记忆-强大的学习跟踪系统,对整体学习进度一目了然,及时调整学习计划,查疑补漏•人性化-界面设计简洁,操作简单,没有繁琐的按钮,一点就可直接进入学习状态-贴心小提示,读懂你的小心思,零基础快速入门,学习无压力,不尴尬-超多原理解析,疑问解答,如同专业Excel导师亲身指导,不翻书快速记忆,Excel小白迅速成长•实用性-课程由浅入深,操作过程详细剖析,一步步模仿,马上就会做。-涉及排序、筛选、函数公式、数据透视表、图表、汇总等核心功能的课程编排,通俗易懂不头疼-互动+观看视频,两种学习方式切换,上班路上,地铁里享受随时随地自由学习通过本课程的学习,您将逐步掌握Excel 2016的各项功能和使用技巧。从而提高您的办公效率,早做完,不加班!!!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值