先在首页上执行一段 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 实现对页面的指定元素截图(可截长图元素)【转载】的更多相关文章

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

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

  2. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

  3. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

  4. selenium截屏操作(也支持截长图)

    1.常用的可能是谷歌和火狐做自动化在抛异常的时候可以截屏保存 from selenium import webdriver br=webdriver.Chrome() br.maximize_wind ...

  5. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  6. Python+selenium点击网页上指定坐标

    from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains dr = ...

  7. python selenium 多个页面对象类使用同一个webdriver(即只打开一个浏览器窗口)

    1 class BasePage(): 2 """selenium基类""" 3 4 def __init__(self, driver=N ...

  8. [Chrome Headless + Python] 截长图 (Take Full-page Screenshot)

    # -*- coding: utf-8 -*- import time import os from selenium import webdriver from selenium.webdriver ...

  9. Python selenium根据class定位页面元素

    在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: <div cl ...

随机推荐

  1. Python 变量比较

    类型一定转换成一样,比如 float 与 int 比较都会出错,坑了我一个小时

  2. 关于sql 注入,感觉比较全的一篇文章

    原文链接 http://netsecurity.51cto.com/art/201705/538863.htm

  3. 同台同时多开DELPHI2007的解决办法

    Cannot create file "C:\Users\Administrator\AppData\Local\Temp\EditorLineEnds.ttr"这个问题的产生根据 ...

  4. pytest.4.Fixture

    From: http://www.testclass.net/pytest/fixture/ 我们可以简单的把Fixture理解为准备测试数据和初始化测试对象的阶段. 一般我们对测试数据和测试对象的管 ...

  5. MongoDB查询结果存放入新的Collection

    第一种方法 var lst = db.visits_201501.find({ "url":/http:\/\/m.baidu.com\/application/ }); whil ...

  6. P2430严酷的训练

    传送 这个题的题干很长,长到令人恶心 这个题的p乍一看好像没有卵用,但其实他很有用(废话).这里的“费用”不再是tw[i](wky做第i道题的时间),而是tw[p[i]](wky做第i道题所对应的知识 ...

  7. PAT 乙级1030 完美数列(25) C++版

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  8. hadoop 伪分布式安装

    0. 关闭防火墙 重启后失效 service iptables start ;#立即开启防火墙,但是重启后失效. service iptables stop ;#立即关闭防火墙,但是重启后失效. 重启 ...

  9. Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?

    ylbtech-Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?  1.返回顶部 1. 当我们在思考如何在这个碎片化.多元化的时代找到真实的.不被标签的自我时,互联网中 ...

  10. Java工程师 必须掌握的知识点

    Web核心:XML.HTTP及Tomcat.Servlet.request与response.cookie与session.jsp技术.jdbc高级.Ajax开发.Filter/Listener高级. ...