2012-08-29 14 views
8

私はPhantomJSを使用して任意のURLからスクリーンショットを作成しています。スクリーンショットを撮る前に、PhantomJSがページの左上隅に間違ってレンダリングするので、ページDOMを操作してすべてのドロップダウンメニューを削除したい(issue)。PhantomJSでのDOM操作

これを行う簡単なDOMスクリプト:

var selects = document.getElementsByTagName('select'); 

    for (var i=0; i < selects.length; i++) { 
     document.getElementsByTagName('select')[i].style.visibility="hidden"; 
    } 

これはテスト済みで、スタンドアロンのJavaScriptとして機能します。

page.open(address, function (status) { 

    if (status !== 'success') { 
     console.log('Unable to load the address!'); 
    } else { 
     window.setTimeout(function() { 

      var selects = document.getElementsByTagName('select'); 

      for (var i=0; i < selects.length; i++) { 
       document.getElementsByTagName('select')[i].style.visibility="hidden"; 
      } 

      page.render(output); 

      phantom.exit(); 

     }, 200); 
    } 
}); 

一部のページはまだ間違った場所に選択ボックスでレンダリングされています。しかし、私は(最後の部分を示す)のスクリーンショットを収集するために使用していますPhantomJSコード内では機能しません。元のPhantomJSレンダリングのバグを解決したり、DOMのドロップダウンメニューを隠したりするのを助けてくれてありがとう。ありがとう。

答えて

11

右のコンテキストで、つまりpage.evaluateのページ内で実行します。これを実証する多くのものがある(例えばexamples included with PhantomJS)。 useragent.js

+5

リンクが無効です –

2

このコードは機能しませんか? パフォーマンスを向上させるためにDOMから要素を再選択する代わりに、forループでキャッシュされた変数を使用しました。

var selects = document.getElementsByTagName('select'); 
for (var i=0; i < selects.length; i++) { 
    selects[i].style.visibility="hidden"; 
} 
関連する問題