标签: phantomjs

page.set('content')不适用于phantomjs中的动态内容

我尝试使用phantomjs屏幕捕获我的页面节点 - 幻像桥.这是我正在尝试的:

 var phantom = require('node-phantom');

 phantom.create(function (err, ph) {
            return ph.createPage(function (err, page) {
              return page.set('content', '<html><head></head><body><p>Hello</p></body></html>', function (err, status) {
                  return page.render('./content.png', function (err) {
                    ph.exit();
                  });
                });
            });
          });
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我尝试设置包含javascript的内容,那不起作用.请帮帮我,为什么不行?

编辑:这不起作用:

var phantom = require('node-phantom');

phantom.create(function (err, ph) {
   return ph.createPage(function (err, page) {
      page.open("about:blank", function(err,status) {
         page.evaluate(function() {        
            document.write('<html><head></head><body><script src="http://code.jquery.com/jquery-1.9.1.min.js"></script><script>$(function(){document.write("Hello from jQuery")})</script></body>');
         });

         setTimeout(function () {
            return page.render('./content.png', function (err) {
                ph.exit();
             }); 
         }, 5000);   
    });         
  });
Run Code Online (Sandbox Code Playgroud)

node.js phantomjs

2
推荐指数
1
解决办法
3249
查看次数

使用CasperJS删除DOM元素

好的,基本上我有一个帖子:

<div class=post>
  <div class=content></div>
  <div class=content-meta></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这就是它的原型,以帮助解释

所以我想要做的是使用一些JS基本上删除或隐藏div'content-meta'

使用JQuery我有:

$('.content-meta').remove();
Run Code Online (Sandbox Code Playgroud)

但是当我使用CasperJS时,我有点困惑,因为我应该如何实现这个代码.

我希望在屏幕捕获之前操纵一个帖子(screencapture部分工作正常)

下面是我一直在测试的代码(URL的OMITTED),它很好地接受了这个类,但我不知道在屏幕捕获之前在哪里/如何执行Jquery来删除检测到的元素:

casper.start('http://pageurl.com/XYZ', function() {

if (this.exists('.content-meta')) {
    this.echo('found .content-meta', 'INFO');
} else {
    this.echo('.content-meta not found', 'ERROR');
}
this.captureSelector('resultingcapture.png', '.post');
});

casper.run();
Run Code Online (Sandbox Code Playgroud)

TL; DR如何从CasperJS函数中执行JS/Jquery?

javascript phantomjs casperjs

2
推荐指数
1
解决办法
3539
查看次数

casperjs/phantom.js可以在Amazon EC2服务器上运行吗?

我已经设法在我的计算机上构建和运行脚本.

如果我希望它在服务器上运行怎么办?我希望能够将请求发送到服务器并使用CasperJS处理它们.

我想在常规的Web服务器上,这样的事情是可能的.

在亚马逊的EC2上有可能吗?

有没有其他Web服务器托管解决方案允许这样的事情?

amazon-ec2 phantomjs casperjs

2
推荐指数
1
解决办法
1690
查看次数

PhantomJS - 渲染无法显示所有图像

我有一个phantomjs脚本,正在逐步浏览我的网站页面.

对于每个页面,我使用page = new WebPage(),然后page.close()在完成页面后.(这是对该过程的简化描述,我使用的是PhantomJS 1.9.7版.)

在每个页面上,我使用page.renderBase64('PNG')一次或多次,并将结果添加到数组.

当我完成所有工作后,我会构建一个新页面并循环显示图像数组,并使用每个图像添加到页面中<img src="data:image/png;base64,.......image.data.......">.

完成后,我page.render(...)用来制作PDF文件.

这一切都很有效...除了在第20张图像之后图像停止出现在PDF中 - 其余图像显示为4x4像素黑点

对于此故障排除......

  • 我已经更改了render输出PNG文件,并在第19或第20张图像后出现同样的问题.
  • 我输出了原始HTML.我可以在Chrome中打开它,所有图像都可见.

任何想法为什么渲染会失败?

pdf-generation phantomjs

2
推荐指数
1
解决办法
5707
查看次数

如何在角度单元测试中模拟窗口滚动?

如何在Jasmine单元测试中模拟或模拟窗口滚动并设置window.pageYOffset属性?

我正在使用Angular 1.3,Jasmine 2.1 + Karma 0.12.28和PhantomJS 1.9.12

这是我的指令:

'use strict';
(function () {
angular
  .module('myApp')
  .directive('scrollNews', scrollNews);

  function scrollNews(){

    var directive = {
      restrict: 'A',
      scope: false,
      link: link
    };

    return directive;

    function link(scope, element) {
      scope.limit = 2;
      //add one to the limit
      scope.loadMore = function() {
        scope.limit += 1;
      };

      var raw = element[0];
      angular.element(window).on('scroll', function () {
        var scrollFrontier = this.pageYOffset + 800;
        // when scrollFrontier has reached raw.scrollHeight, run loadMore()
        if (scrollFrontier >= raw.scrollHeight) { …
Run Code Online (Sandbox Code Playgroud)

unit-testing jasmine phantomjs angularjs karma-runner

2
推荐指数
1
解决办法
6415
查看次数

Selenium with PhantomJS:Yahoo登录表单未提交(Python绑定)

我正在OS X上使用selenium webdriver编写一个python 2.7脚本来登录Yahoo fantasy体育并自动执行某些操作.

该脚本适用于webDriver Firefox和Chromedriver.我最近开始使用PhantomJS(GhostDriver),我发现我无法让PhantomJS Selenium Driver(GhostDriver)登录到Yahoo登录表单.

#!/usr/bin/python
import time
from selenium import webdriver
from selenium.webdriver import PhantomJS
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from sys import argv
import click

@click.command()
@click.option('--days', type=int, prompt='Number of days to set active lineup', help='Number of days to set active lineup')
@click.option('--username', prompt='Your Yahoo username:', help='Your Yahoo account username')
@click.option('--password', prompt='Your Yahoo passwordname:', help='Your Yahoo account password')
def start_active_players(days, username, …
Run Code Online (Sandbox Code Playgroud)

python selenium webdriver phantomjs ghostdriver

2
推荐指数
1
解决办法
2900
查看次数

将完整代码传递给phantomjs

我正在Go中编写一个服务,我正在使用phantomJS从给定的URL生成图像.从我的Go程序,我正在使用Exec启动phantomJS二进制文件.这工作正常,但现在我正在寻找一种方法来传递完整的代码,以及运行二进制文件的调用.我的代码如下:

var args = require('system').args;
var webPage = require('webpage');
var page = webPage.create();

page.viewportSize = {
    width: 1920,
    height: 1080
};

page.open("http://www.url2fetch.com", function (status) {
  var base64 = page.renderBase64('PNG');
  console.log(base64);
  phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

这永远不会改变.除了获取的网址:).所以我的具体问题是:是否可以启动phantomJS并将上面的代码作为参数传递,以便可以通过一次调用执行.原因:我不想将phantomjs脚本与我的Go程序一起打包.

exec go phantomjs

2
推荐指数
1
解决办法
611
查看次数

您如何在NodeJ中抓取动态生成的网页?

有些网站的页面加载时会动态生成DOM和内容。(基于Angularjs的网站为此而臭名昭著)

您使用什么方法?我同时尝试了phantomjs和jsdom,但似乎无法在抓取之前让页面执行其javascript。

这是一个简单的jsdom示例(不是基于angularjs的,但仍是动态生成的)

var env = require('jsdom').env;

exports.scrape = function(link, callback) {
  var config = {
    url: link,
    headers: { 
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'
      },
    done: jsdomDone
  };

  env(config);
}

function jsdomDone(err, window) {
  var info = null;
  if(err) {
    console.error(err);
  } else {
    var $ = require('jquery')(window);

    console.log($('.profilePic').attr('src'));
  }
}

exports.scrape('https://www.facebook.com/elcompanies');
Run Code Online (Sandbox Code Playgroud)

我尝试phantomjs取得了一定的成功。

var page = new WebPage()
var fs = require('fs');

page.onLoadFinished = function() {
  console.log("page load finished");
  window.setTimeout(function() {
    page.render('export.png'); …
Run Code Online (Sandbox Code Playgroud)

web-scraping jsdom phantomjs

2
推荐指数
1
解决办法
7340
查看次数

使用phantomjs代理(selenium webdriver)

我正在使用phantomJS作为硒的驱动剂.我的代码是用python编写的.我按照类似问题的建议,使用以下内容:

service_args = [
    '--proxy=78.23.244.145:80',
    '--proxy-type=http',
    ]
driver = webdriver.PhantomJS(service_args=service_args)
driver.get('http://www.whatismyip.com/')
Run Code Online (Sandbox Code Playgroud)

但是,当我打印html时,几乎没有显示任何内容:

print driver.page_source
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

<html><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)

如果我只是通常调用phantomJS,网站会像往常一样出现:

driver = webdriver.PhantomJS()
Run Code Online (Sandbox Code Playgroud)

作为参考,我已经尝试过这个列表中的一堆代理:

http://proxylist.hidemyass.com/search-1291972#listable

我想知道如何在使用代理时正确显示页面.任何帮助,将不胜感激!

python proxy selenium phantomjs

2
推荐指数
1
解决办法
8931
查看次数

'在js文件上运行casperjs时找不到模块fs'

我试图在我拥有的javascript文件上运行CasperJS,当我运行时

> casperjs index.js 
Run Code Online (Sandbox Code Playgroud)

它说

'CasperError: Cant find module fs'. 
Run Code Online (Sandbox Code Playgroud)

index.js的第一行是

var fs = require('fs');
Run Code Online (Sandbox Code Playgroud)

我安装了node,casperjs和phantomjs,为什么不能找到fs?如果我是对的,fs是Node的文件系统吗?

更新:我将nodejs添加到我的$ PATH,但仍然没有运气.

javascript node.js phantomjs casperjs

2
推荐指数
1
解决办法
2669
查看次数