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")

 

posted on 2018-02-16 11:06  channy14 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/channy14/p/8450070.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值