2016-02-19 75 views
0

我想爬這是使用pdf.js Example爬行使用CasperJS

的問題是一些DOM元素都出現在Firebug但不是在頁面的源代碼做了一個PDF文件的內容的PDF文件,所以每當我嘗試抓取時,我都會看到空白的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

Hi Artjom B. 如果您打開[link](https://mozilla.github.io/pdf.js/web/viewer.html),您將看到pdf內容爲「基於跟蹤的Just-in-時間類型專業化動態「。我想抓取該內容。 – Khwab

+0

如果您只需要文本內容,則不必使用casper或phantom,只需使用API​​即可獲取文本內容。見https://github.com/mozilla/pdf.js/blob/master/examples/node/getinfo.js – async5

+0

嗨Artjom ..如果你看到我的腳本,我等待60秒,該id被加載,但問題是pdf不是隻加載。我通過捕獲屏幕證實了這一點。 – Khwab

回答

-2

你還沒有完全等到頁面(和PDF)被加載。 #pageContainer1是第一頁的容器,但容器可能存在,但其內容尚未創建。

casper.waitForSelector(selector, then, onTimeout, timeout)將等到selector在DOM中可用,然後執行then回調。如果在timeout毫秒之後沒有找到selector等待,它將執行onTimeout

您可以想出一個更好的選擇,可以顯示你的頁面是否被加載,或者你可以等待的時間靜態量:

this.waitForSelector("#pageContainer1") 
    .wait(5000, function() { 
     var pdfContent = this.getPageContent(); 
     fs.write('pdf_check.html', pdfContent, 'w+'); 

     this.capture('pdf_check.png'); 
    }); 
+0

仍然沒有運氣。我甚至嘗試將等待時間改爲20000,但仍然出現跟隨錯誤。 [info] [phantom]第_step 3/4步:在2506ms完成。 [警告] [幻影] Casper.waitFor()超時 [error] [phantom]等待超時5000ms過期,退出。 超過5000ms的等待超時退出。 – Khwab

+0

PhantomJS 2.1.1適用於我。您使用哪個PhantomJS版本?請註冊到'resource.error','page.error','remote.message'和'casper.page.onResourceTimeout'事件([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file -2_caspererrors-JS))。也許有錯誤。 –

+0

我的Phantomjs版本是1.9.0 我嘗試添加「remote.message」,「page.error」,「resource.error」,「page.initialized」,但仍然沒有運氣。我會升級phantomjs並重試。 – Khwab

0

剛剛發現這個帖子的時候我在做研究有關類似問題。你可能已經轉向別的東西了。但我只想爲正在研究這些問題的人添加一點點。

據我所知,在pdf.js中查看的每個頁面內容僅在您滾動到/靠近其位置時加載。所以如果你想要的不僅僅是第1頁的信息,那麼一定要把腳本添加到你的腳本中。如果你期望獲得整個文件。您可以使用PDFView.download()下載它。這是pdf.js中提供的函數,只要您可以查看整個pdf。