最近碰到一个问题,需求是把做好的报告发到领导邮箱(只能发邮箱,不接受邮箱链接等方式),大家都知道outlook对js是不支持的,只支持最简单的html样式,最后选定的方法是截图,但是报告可能很长啊,怎么能一次性全截下来呢。
通过Python seleniu就可操作浏览器全屏截图
接下来直接上代码
- # -*- coding: utf-8 -*-
- from selenium import webdriver
- from selenium.webdriver.chrome.options import Options
- import os
- import time
- def get_image(url, pic_name):
- #chromedriver的路径
- chromedriver = r"C:\Users\name\AppData\Local\Google\Chrome\Application\chromedriver.exe"
- os.environ["webdriver.chrome.driver"] = chromedriver
- #设置chrome开启的模式,headless就是无界面模式
- #一定要使用这个模式,不然截不了全页面,只能截到你电脑的高度
- chrome_options = Options()
- chrome_options.add_argument('headless')
- driver = webdriver.Chrome(chromedriver,chrome_options=chrome_options)
- #控制浏览器写入并转到链接
- driver.get(url)
- time.sleep(1)
- #接下来是全屏的关键,用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
- width = driver.execute_script("return document.documentElement.scrollWidth")
- height = driver.execute_script("return document.documentElement.scrollHeight")
- print(width,height)
- #将浏览器的宽高设置成刚刚获取的宽高
- driver.set_window_size(width, height)
- time.sleep(1)
- #截图并关掉浏览器
- driver.save_screenshot(pic_name)
- driver.close()
- #你输入的参数
- url = 'https://movie.douban.com/top250'
- pic_name = r'D:\image.png'
- get_image(url, pic_name)
素材准备

一个为视频,另一个为像素大小不小于视频的封面。
实现过程
1、调用已启用的浏览器
(通过调用已启用的浏览器,可以直接跳过登录过程)
- from selenium import webdriver
- options = webdriver.ChromeOptions()
- options.add_experimental_option("debuggerAddress", "127.0.0.1:5003")
- driver = webdriver.Chrome(options = options)
2、上传视频和图片
- # 上传本地视频
- driver.find_element_by_xpath('//*[text()="发布视频"]').click()
- time.sleep(2)
- driver.find_element_by_xpath('//input[@type="file"]').send_keys(path_mp4)
-
- # 添加封面
- driver.find_element_by_xpath('//*[text()="编辑封面"]').click()
- time.sleep(1)
- driver.find_element_by_xpath('//div[text()="上传封面"]').click()
- time.sleep(1)
- driver.find_element_by_xpath('//input[@type="file"]').send_keys(path_cover)
- time.sleep(3)
- driver.find_element_by_xpath('//*[text()="裁剪封面"]/..//*[text()="确定"]').click()
- time.sleep(3)
- driver.find_element_by_xpath('//*[text()="设置封面"]/..//*[contains(@class,"upload")]//*[text()="确定"]').click()
3、完整源码展示
- import selenium
- from selenium import webdriver
- import pathlib
- import time
- from selenium.webdriver.common.keys import Keys
-
- # 基本信息
- # 视频存放路径
- catalog_mp4=r"C:\Users\linweiting\Desktop\视频发布"
- # 视频描述
- describe="三国演义周瑜专栏 #国学 #电视 #智慧"
- time.sleep( 5 )
- options=webdriver.ChromeOptions( )
- options.add_experimental_option( "debuggerAddress", "127.0.0.1:5003" )
- driver=webdriver.Chrome( options=options )
-
- path=pathlib.Path( catalog_mp4 )
-
- # 视频地址获取
- path_mp4=""
- for i in path.iterdir( ) :
- if (".mp4" in str( i )) :
- path_mp4=str( i )
- break
-
- if (path_mp4 != "") :
- print( "检查到视频路径:" + path_mp4 )
- else :
- print( "未检查到视频路径,程序终止!" )
- exit( )
-
- # 封面地址获取
- path_cover=""
- for i in path.iterdir( ) :
- if (".png" in str( i ) or ".jpg" in str( i )) :
- path_cover=str( i )
- break
-
- if (path_cover != "") :
- print( "检查到封面路径:" + path_cover )
- else :
- print( "未检查到封面路径,程序终止!" )
- exit( )
-
-
- def publish_douyin() :
- '''
- 作用:发布抖音视频
- '''
-
- # 进入创作者页面,并上传视频
- driver.get( "https://creator.douyin.com/creator-micro/home" )
- time.sleep( 2 )
- driver.find_element_by_xpath( '//*[text()="发布视频"]' ).click( )
- time.sleep( 2 )
- driver.find_element_by_xpath( '//input[@type="file"]' ).send_keys( path_mp4 )
-
- # 等待视频上传完成
- while True :
- time.sleep( 3 )
- try :
- driver.find_element_by_xpath( '//*[text()="重新上传"]' )
- break
- except Exception as e :
- print( "视频还在上传中···" )
-
- print( "视频已上传完成!" )
- time.sleep(3)
- # 添加封面
- driver.find_element_by_xpath( '//*[text()="编辑封面"]' ).click( )
-
- time.sleep( 5 )
- driver.find_element_by_xpath( '//div[text()="上传封面"]' ).click( )
- time.sleep( 1 )
- driver.find_element_by_xpath( '//input[@type="file"]' ).send_keys( path_cover )
- time.sleep( 3 )
- driver.find_element_by_xpath( '//*[text()="裁剪封面"]/..//*[text()="确定"]' ).click( )
- time.sleep( 3 )
- driver.find_element_by_xpath( '//*[@class="operation--2_JP2"]//*[text()="确定"]' ).click()
- #//div[@class="dialog-operation--35HYf"]//*[text()="确定"]
- #//*[text()="设置封面"]/..//*[contains(@class,"upload")]//*[text()="确定"]
- time.sleep( 5 )
- # 输入视频描述
- driver.find_element_by_xpath( '//div[@aria-autocomplete="list"]//br' ).send_keys(
- describe + " #上热门 #dou上热门 #我要上热门" )
-
- # 设置选项
- time.sleep( 1 )
- driver.find_element_by_xpath( '//*[@class="radio--4Gpx6"]' ).click( )
- time.sleep( 1 )
- driver.find_element_by_xpath( '//*[@class="semi-select-selection"]//span[contains(text(),"输入")]' ).click( )
- time.sleep( 1 )
- driver.find_element_by_xpath( '//*[@class="semi-select-selection"]//input' ).send_keys( "深圳" )
-
-
- time.sleep( 5 )
- driver.find_element_by_xpath( '//*[@class="semi-popover-content"]//*[text()="深圳人才公园"]' ).click( )
-
- # 同步到西瓜视频
- # driver.find_element_by_xpath('//div[@class="preview--27Xrt"]//input').click() # 默认启用一次后,后面默认启用了。
-
- #driver.find_element_by_xpath( '//*[@class="card-pen--2P8rh"]' ).click( )
- driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/div[1]/div[12]/div[1]/div/div[2]/div/input')
- #driver.find_element_by_xpath( '//*[@class="DraftEditor-root"]//br' ).send_keys( describe + " #上热门" )
-
-
- #driver.find_element_by_xpath( '//button[text()="确定"]' ).click( )
-
- # 人工进行检查并发布
- # time.sleep(3)
- # # 点击发布
- driver.find_element_by_xpath('//button[text()="发布"]').click()
-
-
- # 开始执行视频发布
- publish_douyin( )
最后,如需更多Python+Selenium欢迎加我【扣】2646695197,审核通过后,即可进入测试交流群,沟通交流日常测试工作相关内容,
全网独家Java+Python双语教学+性能测试
https://ke.qq.com/course/315793?flowToken=1042615