Python + Selenium 实现对页面的指定元素截图(可截长图元素)【转载】
先在首页上执行一段 JavaScript 脚本,将页面的滚动条拖到最下方,然后再拖回顶部,最后才截图。这样可以解决那种按需加载图片的情况
以下代码为转载别处博客改造后的,有chrome和ff两种浏览器。
由于webdriver.chrom只能截取当前页面图片,不能截取整个网页图片,因此额外使用webdriver.PhantomJS,需要下载PhantomJS,将PhantomJS.exe放到python的script目录下
from selenium import webdriver
import time def capture(browser_name,url,save_fn):
#save_fn = save_fn + ".png"
save_fn = url.split("://")[1].replace('/',' ') + ".png"
#print save_fn
if browser_name == 'firefox' or browser_name == 'Firefox' or browser_name == 'ff':
driver = webdriver.Firefox()
driver.maximize_window()
elif browser_name == 'chrome' or browser_name == 'Chrome':
#options = webdriver.chrome.options.Options()
#options.add_argument("--start-maximized")
#driver = webdriver.Chrome(chrome_options=options)
driver = webdriver.PhantomJS()
driver.maximize_window()
else:
raise AssertionError("browser name is error,firefox/Firefox/ff/chrome/Chrome")
driver.get(url) # Load page
driver.execute_script("""
(function () {
var y = 0;
var step = 100;
window.scroll(0, 0); function f() {
if (y < document.body.scrollHeight) {
y += step;
window.scroll(0, y);
setTimeout(f, 50);
} else {
window.scroll(0, 0);
document.title += "scroll-done";
}
} setTimeout(f, 1000);
})();
""") for i in xrange(30):
if "scroll-done" in driver.title:
break
time.sleep(1) driver.save_screenshot(save_fn)
driver.close() if __name__ == "__main__": capture("ff","https://www.cnblogs.com/yes123/p/5279843.html")
Python + Selenium 实现对页面的指定元素截图(可截长图元素)【转载】的更多相关文章
- 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)
对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- Python+Selenium自动化-获取页面信息
Python+Selenium自动化-获取页面信息 1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...
- selenium截屏操作(也支持截长图)
1.常用的可能是谷歌和火狐做自动化在抛异常的时候可以截屏保存 from selenium import webdriver br=webdriver.Chrome() br.maximize_wind ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- Python+selenium点击网页上指定坐标
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains dr = ...
- python selenium 多个页面对象类使用同一个webdriver(即只打开一个浏览器窗口)
1 class BasePage(): 2 """selenium基类""" 3 4 def __init__(self, driver=N ...
- [Chrome Headless + Python] 截长图 (Take Full-page Screenshot)
# -*- coding: utf-8 -*- import time import os from selenium import webdriver from selenium.webdriver ...
- Python selenium根据class定位页面元素
在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: <div cl ...
随机推荐
- 使用zlib来压缩文件-用delphi描述
今天用到压缩文件的问题,找了一些网上的资料,后来发现了delphi自身所带的zlib单元,根据例子稍微改变了一些,使它能够符合所有的格式. 使用时,需要Zlib.pas和 Zlibconst.pas两 ...
- ubuntu下安装Pycharm
先在PyCharm官网下载安装包 链接:https://www.jetbrains.com/pycharm/download/#section=linux 下载完成后,解压并安装,安装过程需要认证身份 ...
- NetBeans IDE 多行标签设置方法
- 关于linux中的system函数
Linux下使用system()函数一定要谨慎 https://blog.csdn.net/senen_wakk/article/details/51496322 system()正确应用 https ...
- C/C++基础----拷贝控制
拷贝控制操作,有5个特殊成员函数copy ctor,copy =opt,move ctor,move =opt,dtor 有哪些地方会用到 拷贝初始化 除了=定义变量时 参数传递和函数返回时 花括号列 ...
- Excel导出文件流下载
Controller.cs @CrossOrigin(allowCredentials="true", allowedHeaders="*", methods= ...
- 服务网关zuul之七:zuul中的动态刷新路由配置
<spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...
- Spring @Async实现异步调用示例
什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果 ...
- 字符串全部转换为大写用str.toUpperCase()方法
var message="Hello world!"; var x=message.toUpperCase();
- HDOJ 2005 第几天?
#include<iostream> using namespace std; ] = { ,,,,,,,,,,, }; ] = { ,,,,,,,,,,, }; bool isRYear ...