我正在尝试抓取使用pdf.js制作的PDF文件的内容 Example
问题是一些DOM元素在FireBug中显示但在页面源中没有显示,所以每当我尝试抓取时,我都会得到空白的pdf页面。
我尝试使用NightWatchJs做同样的事情并且它有效,但出于特定目的,我想坚持使用CasperJS。
这是我的代码
var casper = require('casper').create({
verbose: true,
logLevel: 'debug',
userAgent: 'Mozilla/5.0 poi poi poi (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',
contentType: 'application/pdf',
viewportSize: {
width:2000,
height:1000
},
pageSettings: {
javascriptEnabled: true,
loadImages: true,
loadPlugins: true
}
});
var fs = require('fs');
casper.start('https://mozilla.github.io/pdf.js/web/viewer.html', function() {
this.waitForSelector("#pageContainer1", function check() {
var pdfContent = this.getPageContent();
fs.write( '/var/www/caspersJS/pdf_check.html', pdfContent, 'w+' );
this.capture('/var/www/caspersJS/pdf_check.png', {
top:0,
left:0,
height:2368,
width:2024,
format: 'png',
quality: 100
});
}, function then() {
var pdfContent = this.getPageContent();
fs.write( '/var/www/caspersJS/pdf_then.html', pdfContent, 'w+' );
this.capture('/var/www/caspersJS/pdf_then.png', {
top:0,
left:0,
height:2368,
width:2024,
format: 'png',
quality: 100
});
}, 60000);
});
casper.run();
答案 0 :(得分:0)
当我正在研究类似的问题时,刚发现这篇文章。你可能已经转向别的东西了。但我只是想为那些正在研究这些问题的人添加一些内容。
据我所知,pdf.js中查看的每个页面内容仅在您滚动到/靠近其位置时加载。因此,如果您不仅需要第1页上的信息,请务必将滚动条添加到脚本中。如果您期待获取整个文件。你可以用PDFView.download();这是pdf.js中提供的函数,只要您可以查看整个pdf。
答案 1 :(得分:-2)
在加载页面(和PDF)之前,您尚未完全等待。 #pageContainer1
是第一页的容器,但容器可能存在,但其内容尚未创建。
casper.waitForSelector(selector, then, onTimeout, timeout)
将等待,直到selector
在DOM中可用,然后执行then
回调。如果在selector
毫秒等待后未找到timeout
,则会执行onTimeout
。
您可以设计一个更好的选择器,可以显示页面是否已加载,或者您可以等待一段时间:
this.waitForSelector("#pageContainer1")
.wait(5000, function() {
var pdfContent = this.getPageContent();
fs.write( 'pdf_check.html', pdfContent, 'w+' );
this.capture('pdf_check.png');
});