我尝试使用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) 好的,基本上我有一个帖子:
<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?
我已经设法在我的计算机上构建和运行脚本.
如果我希望它在服务器上运行怎么办?我希望能够将请求发送到服务器并使用CasperJS处理它们.
我想在常规的Web服务器上,这样的事情是可能的.
在亚马逊的EC2上有可能吗?
有没有其他Web服务器托管解决方案允许这样的事情?
我有一个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张图像后出现同样的问题.任何想法为什么渲染会失败?
如何在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) 我正在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) 我正在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程序一起打包.
有些网站的页面加载时会动态生成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) 我正在使用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
我想知道如何在使用代理时正确显示页面.任何帮助,将不胜感激!
我试图在我拥有的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,但仍然没有运气.
phantomjs ×10
casperjs ×3
javascript ×2
node.js ×2
python ×2
selenium ×2
amazon-ec2 ×1
angularjs ×1
exec ×1
ghostdriver ×1
go ×1
jasmine ×1
jsdom ×1
karma-runner ×1
proxy ×1
unit-testing ×1
web-scraping ×1
webdriver ×1