1. # coding=utf-8
  2. import os
  3. import time
  4. from selenium import webdriver
  5. from selenium.webdriver.chrome.options import Options
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.support import expected_conditions as EC
  8. from selenium.webdriver.support.wait import WebDriverWait
  9. from PIL import Image
  10. import xlsxwriter, xlrd
  11. import pandas as pd
  12.  
  13. def login():
  14. chrome_options = Options()
  15. chrome_options.add_argument('--headless')
  16. driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options)
  17. driver.set_window_size(1200, 741)
  18. driver.implicitly_wait(2)
  19. print('初始化中...')
  20. driver.get("http://xxxve")
  21. print('填写登录信息中...')
  22. acc = driver.find_element_by_id('login-email')
  23. pwd = driver.find_element_by_id('login-pass')
  24. btn = driver.find_element_by_tag_name('button')
  25. acc.send_keys('zhxxxm')
  26. pwd.send_keys('LONxxxxx$')
  27. btn.click()
  28. print('跳转到验证码页面中...')
  29. time.sleep(2)
  30. capta = driver.find_element_by_id('code')
  31. capta_input = input('请输入两步验证码:')
  32. capta.send_keys(capta_input)
  33. btn1 = driver.find_element_by_tag_name('button')
  34. btn1.click()
  35. time.sleep(2)
  36. print('跳转到创意编辑页面中...')
  37. return driver
  38.  
  39. faild_url = []
  40.  
  41. def parse_img(driver, url):
  42. cid = url.split('/')[-2]
  43. try:
  44. driver.get_screenshot_as_file("./screen_shot/{}.png".format(cid))
  45. element = driver.find_element_by_class_name("AdvertViewer-item")
  46. # print(element.location) # 打印元素坐标
  47. # print(element.size) # 打印元素大小
  48.  
  49. left = element.location['x']
  50. top = element.location['y']
  51. right = element.location['x'] + element.size['width']
  52. bottom = element.location['y'] + element.size['height']
  53.  
  54. im = Image.open("./screen_shot/{}.png".format(cid))
  55. im = im.crop((left, top, right, bottom))
  56. im.save("./screen_shot/{}.png".format(cid))
  57. print("创意-->{}.png 已经保存".format(cid))
  58. except Exception as e:
  59. faild_url.append(url)
  60.  
  61. def get_screen(driver, url, tem):
  62. try:
  63. driver.get(url)
  64. time.sleep(10)
  65. parse_img(driver,url)
  66.  
  67. except Exception as e:
  68. print(e, url)
  69. faild_url.append(url)
  70.  
  71. def new_xlsx():
  72. # 打开excel文件
  73. data = xlrd.open_workbook('全xxx意.xlsx')
  74. book = xlsxwriter.Workbook('全行xxx意-fina.xlsx')
  75. # 获取第一张工作表(通过索引的方式)
  76. tables = data.sheets()
  77. for table in tables:
  78. worksheet = book.add_worksheet(table.name)
  79. nrows = table.nrows
  80.  
  81. # 表头
  82. rows = table.row_values(0)
  83. for i, v in enumerate(rows):
  84. if v != '':
  85. worksheet.write(0, i, v)
  86. # 表体
  87. for k in range(1, nrows - 1):
  88. rows = table.row_values(k)
  89. for i, v in enumerate(rows):
  90. if v != '':
  91. if str(int(rows[6])) + '.png' in os.listdir('./screen_shot/'):
  92. image_width, image_height = Image.open('./screen_shot/' + str(int(rows[6])) + '.png').size
  93. worksheet.set_column('H:H', width=58)
  94. worksheet.set_row(k, height=image_height*0.8)
  95. if i == 7:
  96. worksheet.insert_image('H' + str(k + 1), './screen_shot/' + str(int(rows[6])) + '.png',
  97. {'x_offset': 6, 'y_offset': 3})
  98. else:
  99. worksheet.write(k, i, v)
  100. else:
  101. worksheet.write(k, i, v)
  102.  
  103. book.close()
  104.  
  105. if __name__ == '__main__':
  106. df = pd.read_excel('./全行xxxx.xlsx')
  107. driver1 = login()
  108. link_list = df['link'].tolist()
  109. tem_list = df['样式'].tolist()
  110. dict_url = zip(link_list, tem_list)
  111.  
  112. for url, tem in dict_url:
  113. count = 1
  114. get_screen(driver1, url, tem)
  115. count += 1
  116. print('还剩 %s 个' % str(len(link_list) - count))
  117. driver1.quit()
  118.  
  119. print('失败的url:', faild_url)
  120. print('所有抓取结束')
  121. new_xlsx()
  122. print('插入表格结束')

自动网页截图并指定元素位置裁剪图片并保存到excel表格的更多相关文章

  1. jquery操作滚动条滚动到指定元素位置 scrollTop

    $('.brand_t a').bind('click',function(){ if($(this).attr('title1')){ var toChar = $(this).attr('titl ...

  2. JavaScript 滚动页面到指定元素位置

    页面评论功能,当评论较多时,有时须要滚动到评论头部. 能够使用scrollTop方法,加上一点延时动画(animate),可訪问在线演示,代码大体例如以下: <html> <scri ...

  3. winform中RichTextBox在指定光标位置插入图片

    代码如下: //获取RichTextBox控件中鼠标焦点的索引位置 int startPosition = this.richTextBox1.SelectionStart; //从鼠标焦点处开始选中 ...

  4. MYSQL 为表指定文件位置 data directory

    背景知识: 如果表不指定文件位置,它会保存到 data/database_name/table_file;其中data在你指定的安装目录下,为了提高IO我们尽可能的 用到多个硬盘的IO能力,这个就需要 ...

  5. 使用JS方法使页面滚动到指定元素+优化+API介绍(动画)

    前言 当页面最上部有顶部菜单是,使用锚点跳转的方法很容易挡住想要呈现的内容(如下图技能两个字被挡住了一半),为避免出现这样的问题,故滚动到指定元素使用用JS的方法来实现. 目录 使用的API简介 初版 ...

  6. 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)

    对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...

  7. html2canvas根据DOM元素样式实现网页截图

    html2canvas是一个相当不错的JavaScript类库,它使用了html5和css3的一些新功能特性,实现了在客户端对网页进行截图的功 能.html2canvas通过获取页面的DOM和元素的样 ...

  8. 如何使页面滚动条移动到指定元素element的位置处?

    如何使页面滚动条移动到指定元素element的位置处? 在用selenium做测试时,会遇到需要操作的元素不在当前可视页面中的情况,如果是手工测试,自然很简单,手动拖拽滚动条到目标元素处即可. 那么, ...

  9. 滚动到指定元素的id处+当元素出现在浏览器显示区域就会自动加载

    //滚动到指定元素的id处 如:$("#Exam82") function Jump() { var scroll_offset = $("#Exam82"). ...

随机推荐

  1. Android adb临时关闭Selinux

    在eng/userdebug版本中 使用getenforce 命令查询当前权限状态,如:adb shell getenforce 使用setenforce 命令进行设置:adb shell seten ...

  2. Python - Django - form 组件基本用法

    普通 form 表单的处理: reg.html: <!DOCTYPE html> <html lang="en"> <head> <met ...

  3. [LeetCode] 461. Hamming Distance 汉明距离

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  4. burpsuite证书生成和导入

    官网下载个社区版,基本还是够用的 配置代理的ip和port,选择根证书生成方式 访问配置的ip:port,下载证书 双击下载的证书,导入keychain 打开keychain,信任根证书 再次使用bu ...

  5. [计算机视觉][神经网络与深度学习]SSD安装及其训练教程

    SSD的安装 在home目录下,获取SSD的代码,下载完成后有一个caffe文件夹 git clone https://github.com/weiliu89/caffe.git cd caffe g ...

  6. windows server 守护进程nssm

    安装nssm 下载程序 https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip 安装nssm,以管理员运行cmd.exe,执行如下: C:\Users\prolds ...

  7. 基于 appium 的 UI 自动化测试

    其中主要的目录和文件为: /MPTestCases ----------- 存放测试用例 /errorScreenShot ------------ 用例执行失败生成的错误截图 startTest.p ...

  8. K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署

    Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...

  9. Java基础笔试练习(九)

    1.下面所示的java代码,运行时,会产生()类型的异常 ? int Arry_a[] = new int[10]; System.out.println(Arry_a[10]); A.Arithme ...

  10. flask报错 KeyError: <flask.cli.ScriptInfo object at 0x000001638AC164E0>

    (flask_venv) D:\DjangoProject\flask_test>flask db init Traceback (most recent call last): File &q ...