Javascript 使用phantomJS将数据从一个页面复制到另一个页面
我正在尝试将一些数据从一个已处理的网页复制到一个新的要导出的网页中。背景是,我需要刮去一个页面的部分内容,并需要用原始页面的部分内容构建一个新页面。 问题似乎在于phantomJs includeJs()和evaluate()方法是沙盒式的,我看不到将DOM从一个页面导入到另一个页面的正确方法 我有一些测试代码如下所示,其中页面为原始页面,新页面为新页面:Javascript 使用phantomJS将数据从一个页面复制到另一个页面,javascript,dom,web-scraping,phantomjs,Javascript,Dom,Web Scraping,Phantomjs,我正在尝试将一些数据从一个已处理的网页复制到一个新的要导出的网页中。背景是,我需要刮去一个页面的部分内容,并需要用原始页面的部分内容构建一个新页面。 问题似乎在于phantomJs includeJs()和evaluate()方法是沙盒式的,我看不到将DOM从一个页面导入到另一个页面的正确方法 我有一些测试代码如下所示,其中页面为原始页面,新页面为新页面: .... var title = page.evaluate(function() { return tit
....
var title = page.evaluate(function() {
return title = document.getElementById('fooo').innerHTML;
});
console.log('page title:' + title);
//fs.write('c:/Temp/title.js', "var title = '" + title + "';", 'w');
var out = new WebPage;
out.viewportSize = page.viewportSize;
out.content = '<html><head></head><body><div id="wrapper"></div><p>done</p></body></html>';
out.includeJs('c:/Temp/title.js', function() {
var p = document.createElement('p');
p.appendChild(document.createTextNode(title));
document.getElementById('wrapper').appendChild(p);
});
...
。。。。
var title=page.evaluate(函数(){
return title=document.getElementById('fooo').innerHTML;
});
console.log('页面标题:'+标题);
//fs.write('c:/Temp/title.js','var title='“+title+”;“,'w');
var out=新网页;
out.viewportSize=page.viewportSize;
out.content='done';
out.includeJs('c:/Temp/title.js',function(){
var p=document.createElement('p');
p、 appendChild(document.createTextNode(title));
document.getElementById('wrapper').appendChild(p);
});
...
上一个includeJs
调用中的函数将不起作用-正如您所注意到的,它是沙盒,这意味着闭包将不起作用,因此不会定义title
。将变量传递到page.evaluate
的方法是,但从PhantomJS v.1.4.1起不可用
解决这个问题的一般方法是使用函数
构造函数,它允许您使用字符串创建函数:
var myVar = {some:"values", I:"want to pass into my page"},
test = new Function("window.myVar = " + JSON.stringify(myVar));
page.evaluate(test);
现在,您可以在沙箱中引用myVar
来计算类似于您所拥有的函数,并且您的数据将在客户端范围内可用