# 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('插入表格结束')

自动网页截图并指定元素位置裁剪图片并保存到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. 如何查看window 7/window 8 等系统 的激活状态?

    http://www.officezhushou.com/office-key/   Office激活密钥 Win+R 输入: slmgr.vbs -dlv 显示:最为详尽的激活信息,包括:激活ID. ...

  2. osg::Node位置移动

    osg::Node节点移动的时候,可以使用osg::Matrix::translate  来完成 osg::Matrix::translate中的参数是  当前位置到目标位置需要改变的值,所以,传递参 ...

  3. java内存泄露/溢出等常见问题模拟及原因分析

    Java 8:从持久代到metaspace 系统稳定性--OutOfMemoryError 常见原因及解决方法 java各种异常问题示例(附pdf下载): java.lang.OutOfMemoryE ...

  4. npm,umi,yarn

    npm 是什么? npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门.它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(pack ...

  5. TCP协议有几大计时器?

    1)超时重传计时器 目的:避免无限等待确认报文 创建时间:在发送TCP报文段时,会为该报文段设置一个超时重传计时器 可能发生的情况:在超时时间到达之前,收到了该报文段的确认则撤销计时器,否则重传该报文 ...

  6. [转帖]为什么需要 Zookeeper

    为什么需要 Zookeeper 柳树 学习&思考&写作 | 公众号:柳树的絮叨叨 ​关注他 童话 . 沈万马 等 351 人赞同了该文章 很多中间件,比如Kafka.Hadoop.HB ...

  7. 【转帖】你知道X86构架,你知道SH构架吗?

    你知道X86构架,你知道SH构架吗? https://www.eefocus.com/mcu-dsp/363100   前面我们讲到了 8 位处理器,32 位处理器,以及 X86 构架,那么除了这些还 ...

  8. c++快速排序原理及优化

    快速排序 快速排序的时间复杂度为O(logn) 注意:快速排序主要是标志数的选取,如果所选的数恰好为最小或者最大,则是最糟糕的情况,即一轮下来数据没有发生变化! 如何选取中间的标志数成为了算法的关键. ...

  9. postman接口测试-参数化-测试数据Text文本

    全局变量参数化 在环境变量里面设置好参数,比如url=http://www.baidu.com 某一类型的BaseUrl全部都是www.baidu.com,参数化之后倘若哪天URL变更之后,改一个环境 ...

  10. git简单介绍

    一种常见的版本控制工具 获取 克隆仓库 git支持以ssh或者http的方式来标识远程仓库 git clone git@github.com:username/project.git git clon ...