docs: def casperjs_capture(stream, url, method=None, width=None, height=None,
                       selector=None, data=None, waitfor=None, size=None,
                       crop=None, render='png', wait=None):
      """
      Captures web pages using ``casperjs``
      """
      if isinstance(stream, six.string_types):
          output = stream
      else:
          with NamedTemporaryFile('wb+', suffix='.%s' % render, delete=False) as f:
              output = f.name
      try:
          cmd = CASPERJS_CMD + [url, output]
  
          # Extra command-line options
          cmd += ['--format=%s' % render]
          if method:
              cmd += ['--method=%s' % method]
          if width:
              cmd += ['--width=%s' % width]
          if height:
              cmd += ['--height=%s' % height]
          if selector:
              cmd += ['--selector=%s' % selector]
          if data:
              cmd += ['--data="%s"' % json.dumps(data)]
          if waitfor:
              cmd += ['--waitfor=%s' % waitfor]
          if wait:
              cmd += ['--wait=%s' % wait]
          logger.debug(cmd)
          # Run CasperJS process
          proc = subprocess.Popen(cmd, **casperjs_command_kwargs())
          stdout = proc.communicate()[0]
          process_casperjs_stdout(stdout)
  
          size = parse_size(size)
          render = parse_render(render)
  
          if size or (render and render != 'png' and render != 'pdf'):
              # pdf isn't an image, therefore we can't postprocess it.
              image_postprocess(output, stream, size, crop, render)
          else:
              if stream != output:
                  # From file to stream
                  with open(output, 'rb') as out:
                      stream.write(out.read())
                  stream.flush()
      finally:
          if stream != output:
              os.unlink(output)