準備する
これをすべて行うには、XUL DOMにアクセスできるJavaScriptコンソールが必要でした。 ブラウザウィンドウの右下隅にアイコンを追加するFireFox用の非常に簡単な拡張機能を作成しました
 
      このアイコンをクリックすると、JavaScriptコードを記述し、ブラウザー要素を管理できるウィンドウが開きます。 拡張機能はここからダウンロードできます 。
スクリプトを実行するには、CTRL + Enterを押します(テキストボックス要素にフォーカスがあります)。
戦車にいる人のために
すべてのプログラマーがFireFox自体のJavaScriptオブジェクトに精通しているわけではないので、ちょっとした理論が役立つと思います。 HTMLと同様に、「最高のプレイヤー」はウィンドウとドキュメントです。 コンテンツ(HTML DOM)にアクセスするには、このように書く必要があります
 var links = window.content. document .getElementsByTagName( 'a' ); 
      
        
        
        
      
     // or just 
      
        
        
        
      
     var links = content. document .querySelectorAll( 'a' ); 
      
        
        
        
      
     alert(links.length) 
      
        
        
        
      
     
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter . 
      
        
        
        
      
    
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    var links = window.content. document .getElementsByTagName( 'a' );
// or just
var links = content. document .querySelectorAll( 'a' );
alert(links.length)
* This source code was highlighted with Source Code Highlighter .
 var links = window.content. document .getElementsByTagName( 'a' ); 
      
        
        
        
      
     // or just 
      
        
        
        
      
     var links = content. document .querySelectorAll( 'a' ); 
      
        
        
        
      
     alert(links.length) 
      
        
        
        
      
     
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter .
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      
        
        
        
      
    もう1つの非常に重要なポイントは、HTML DOMの読み込みの瞬間をキャッチする方法、およびタブとブラウザーを操作する方法です。 tabbrowser要素にアクセスするには、グローバル変数gBrowserを使用できます。 この要素を使用すると、タブを操作できます。 いくつかの例
 // add new tab 
      
        
        
        
      
     var tab = gBrowser.addTab( 'http://habrahabr.ru' ); 
      
        
        
        
      
     gBrowser.selectedTab = tab; 
      
        
        
        
      
     
      
        
        
        
      
     // get browser element for tab 
      
        
        
        
      
     var browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     
      
        
        
        
      
     // add listeners on page load 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     // listener implementation 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     
      
        
        
        
      
     // add listeners on HTML DOM loaded 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     if ( event .originalTarget instanceof HTMLDocument) { 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     // listener implementation 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter . 
      
        
        
        
      
    
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    // add new tab
var tab = gBrowser.addTab( 'http://habrahabr.ru' );
gBrowser.selectedTab = tab;
// get browser element for tab
var browser = gBrowser.getBrowserForTab(tab);
// add listeners on page load
browser.addEventListener( 'DOMContentLoaded' , function ( event ){
// listener implementation
}, false );
// add listeners on HTML DOM loaded
browser.addEventListener( 'DOMContentLoaded' , function ( event ){
if ( event .originalTarget instanceof HTMLDocument) {
var document = event .originalTarget;
// listener implementation
}
}, false );
* This source code was highlighted with Source Code Highlighter .
 // add new tab 
      
        
        
        
      
     var tab = gBrowser.addTab( 'http://habrahabr.ru' ); 
      
        
        
        
      
     gBrowser.selectedTab = tab; 
      
        
        
        
      
     
      
        
        
        
      
     // get browser element for tab 
      
        
        
        
      
     var browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     
      
        
        
        
      
     // add listeners on page load 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     // listener implementation 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     
      
        
        
        
      
     // add listeners on HTML DOM loaded 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     if ( event .originalTarget instanceof HTMLDocument) { 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     // listener implementation 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter .
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      
        
        
        
      
    また、Webページをファイルに保存する方法を学ぶことも役立つと思います。
 var tab = gBrowser.addTab( 'http://habrahabr.ru' ); 
      
        
        
        
      
     gBrowser.selectedTab = tab; 
      
        
        
        
      
     var browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     if ( document instanceof HTMLDocument && this .contentWindow. document == document ) { 
      
        
        
        
      
     var basename = document .location.href.replace(/\/+$/, '' ), 
      
        
        
        
      
     pos = basename.lastIndexOf( '/' ); 
      
        
        
        
      
     if (pos != -1) { 
      
        
        
        
      
     basename = basename.substr(pos+1); 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     var file = Components.classes[ "@mozilla.org/file/local;1" ].createInstance(Components.interfaces.nsILocalFile); 
      
        
        
        
      
     file.initWithPath( '/tmp/' +basename); 
      
        
        
        
      
     if (!file.exists()) { 
      
        
        
        
      
     var chosen = new AutoChosen(file, makeFileURI(file)); 
      
        
        
        
      
     internalSave( document .location.href, document , null , null , document .contentType, false , null , chosen); 
      
        
        
        
      
     } 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ) 
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter . 
      
        
        
        
      
    
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    var tab = gBrowser.addTab( 'http://habrahabr.ru' );
gBrowser.selectedTab = tab;
var browser = gBrowser.getBrowserForTab(tab);
browser.addEventListener( 'DOMContentLoaded' , function ( event ){
var document = event .originalTarget;
if ( document instanceof HTMLDocument && this .contentWindow. document == document ) {
var basename = document .location.href.replace(/\/+$/, '' ),
pos = basename.lastIndexOf( '/' );
if (pos != -1) {
basename = basename.substr(pos+1);
}
var file = Components.classes[ "@mozilla.org/file/local;1" ].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( '/tmp/' +basename);
if (!file.exists()) {
var chosen = new AutoChosen(file, makeFileURI(file));
internalSave( document .location.href, document , null , null , document .contentType, false , null , chosen);
}
}
}, false )
* This source code was highlighted with Source Code Highlighter .
 var tab = gBrowser.addTab( 'http://habrahabr.ru' ); 
      
        
        
        
      
     gBrowser.selectedTab = tab; 
      
        
        
        
      
     var browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     if ( document instanceof HTMLDocument && this .contentWindow. document == document ) { 
      
        
        
        
      
     var basename = document .location.href.replace(/\/+$/, '' ), 
      
        
        
        
      
     pos = basename.lastIndexOf( '/' ); 
      
        
        
        
      
     if (pos != -1) { 
      
        
        
        
      
     basename = basename.substr(pos+1); 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     var file = Components.classes[ "@mozilla.org/file/local;1" ].createInstance(Components.interfaces.nsILocalFile); 
      
        
        
        
      
     file.initWithPath( '/tmp/' +basename); 
      
        
        
        
      
     if (!file.exists()) { 
      
        
        
        
      
     var chosen = new AutoChosen(file, makeFileURI(file)); 
      
        
        
        
      
     internalSave( document .location.href, document , null , null , document .contentType, false , null , chosen); 
      
        
        
        
      
     } 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ) 
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter .
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      
        
        
        
      
    追加の条件this.contentWindow.document == documentは、ページにiframe要素があり、フレームからではなく、必要なページを1回だけ保存する必要がある場合に状況をフィルタリングします。
internalSave関数(ファイルを保存)およびAutoChosenクラス(ユーザーによるファイルの選択をエミュレートすると理解しているため)については、 ソースコードのコメントを読むことができます 。 ここでファイルを操作するその他の例。
FireFoxをトレーニングします
FireFoxに特定のユーザーとしてHabrにログインするように指示するスクリプトを作成します。
 var Crawler = { 
      
        
        
        
      
     habrahabr: function (username, password) { 
      
        
        
        
      
     this .username = username; 
      
        
        
        
      
     this .password = password; 
      
        
        
        
      
     }, 
      
        
        
        
      
     onHTMLLoaded: function (browser, callback) { 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     if ( document instanceof HTMLDocument 
      
        
        
        
      
     && this .contentWindow. document == document 
      
        
        
        
      
     ) { 
      
        
        
        
      
     this .removeEventListener( 'DOMContentLoaded' , arguments.callee, false ); 
      
        
        
        
      
     callback.call( this , event , document ); 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     return browser; 
      
        
        
        
      
     } 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     Crawler.habrahabr.prototype = { 
      
        
        
        
      
     url: 'http://habrahabr.ru/' , 
      
        
        
        
      
     openAndSignIn: function (inNewTab) { 
      
        
        
        
      
     var tab = gBrowser.selectedTab, browser = null ; 
      
        
        
        
      
     if (inNewTab) { 
      
        
        
        
      
     tab = gBrowser.addTab( this .url); 
      
        
        
        
      
     } else { 
      
        
        
        
      
     content. document .location = this .url; 
      
        
        
        
      
     } 
      
        
        
        
      
     browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     var that = this ; 
      
        
        
        
      
     Crawler.onHTMLLoaded(browser, function ( event , document ){ 
      
        
        
        
      
     document .location = document .querySelector( 'dl.panel-personal a' ).href; 
      
        
        
        
      
     Crawler.onHTMLLoaded( this , function ( event , document ){ 
      
        
        
        
      
     var user  = document .getElementById( 'reg-f-username' ); 
      
        
        
        
      
     user.value = that.username; 
      
        
        
        
      
     document .getElementById( 'reg-f-password' ).value = that.password; 
      
        
        
        
      
     user.form.querySelector( 'input[type="submit"]' ).click(); 
      
        
        
        
      
     }); 
      
        
        
        
      
     }); 
      
        
        
        
      
     } 
      
        
        
        
      
     }; 
      
        
        
        
      
     var cr = new Crawler.habrahabr( 'serjoga' , '***' ); 
      
        
        
        
      
     cr.openAndSignIn( true ); 
      
        
        
        
      
     
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter . 
      
        
        
        
      
    
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    var Crawler = {
habrahabr: function (username, password) {
this .username = username;
this .password = password;
},
onHTMLLoaded: function (browser, callback) {
browser.addEventListener( 'DOMContentLoaded' , function ( event ){
var document = event .originalTarget;
if ( document instanceof HTMLDocument
&& this .contentWindow. document == document
) {
this .removeEventListener( 'DOMContentLoaded' , arguments.callee, false );
callback.call( this , event , document );
}
}, false );
return browser;
}
}
Crawler.habrahabr.prototype = {
url: 'http://habrahabr.ru/' ,
openAndSignIn: function (inNewTab) {
var tab = gBrowser.selectedTab, browser = null ;
if (inNewTab) {
tab = gBrowser.addTab( this .url);
} else {
content. document .location = this .url;
}
browser = gBrowser.getBrowserForTab(tab);
var that = this ;
Crawler.onHTMLLoaded(browser, function ( event , document ){
document .location = document .querySelector( 'dl.panel-personal a' ).href;
Crawler.onHTMLLoaded( this , function ( event , document ){
var user = document .getElementById( 'reg-f-username' );
user.value = that.username;
document .getElementById( 'reg-f-password' ).value = that.password;
user.form.querySelector( 'input[type="submit"]' ).click();
});
});
}
};
var cr = new Crawler.habrahabr( 'serjoga' , '***' );
cr.openAndSignIn( true );
* This source code was highlighted with Source Code Highlighter .
 var Crawler = { 
      
        
        
        
      
     habrahabr: function (username, password) { 
      
        
        
        
      
     this .username = username; 
      
        
        
        
      
     this .password = password; 
      
        
        
        
      
     }, 
      
        
        
        
      
     onHTMLLoaded: function (browser, callback) { 
      
        
        
        
      
     browser.addEventListener( 'DOMContentLoaded' , function ( event ){ 
      
        
        
        
      
     var document = event .originalTarget; 
      
        
        
        
      
     if ( document instanceof HTMLDocument 
      
        
        
        
      
     && this .contentWindow. document == document 
      
        
        
        
      
     ) { 
      
        
        
        
      
     this .removeEventListener( 'DOMContentLoaded' , arguments.callee, false ); 
      
        
        
        
      
     callback.call( this , event , document ); 
      
        
        
        
      
     } 
      
        
        
        
      
     }, false ); 
      
        
        
        
      
     return browser; 
      
        
        
        
      
     } 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     Crawler.habrahabr.prototype = { 
      
        
        
        
      
     url: 'http://habrahabr.ru/' , 
      
        
        
        
      
     openAndSignIn: function (inNewTab) { 
      
        
        
        
      
     var tab = gBrowser.selectedTab, browser = null ; 
      
        
        
        
      
     if (inNewTab) { 
      
        
        
        
      
     tab = gBrowser.addTab( this .url); 
      
        
        
        
      
     } else { 
      
        
        
        
      
     content. document .location = this .url; 
      
        
        
        
      
     } 
      
        
        
        
      
     browser = gBrowser.getBrowserForTab(tab); 
      
        
        
        
      
     var that = this ; 
      
        
        
        
      
     Crawler.onHTMLLoaded(browser, function ( event , document ){ 
      
        
        
        
      
     document .location = document .querySelector( 'dl.panel-personal a' ).href; 
      
        
        
        
      
     Crawler.onHTMLLoaded( this , function ( event , document ){ 
      
        
        
        
      
     var user  = document .getElementById( 'reg-f-username' ); 
      
        
        
        
      
     user.value = that.username; 
      
        
        
        
      
     document .getElementById( 'reg-f-password' ).value = that.password; 
      
        
        
        
      
     user.form.querySelector( 'input[type="submit"]' ).click(); 
      
        
        
        
      
     }); 
      
        
        
        
      
     }); 
      
        
        
        
      
     } 
      
        
        
        
      
     }; 
      
        
        
        
      
     var cr = new Crawler.habrahabr( 'serjoga' , '***' ); 
      
        
        
        
      
     cr.openAndSignIn( true ); 
      
        
        
        
      
     
      
        
        
        
      
     * This source code was highlighted with Source Code Highlighter .
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      
        
        
        
      
    まず、Crawlerオブジェクトを作成し、そこに新しいパーサーを追加できます。 ユーザー名とパスワードを渡すhabrahabrパーサーのコンストラクターを作成します。 habrahabrオブジェクトのプロトタイプにopenAndSignInメソッドを追加します。 このメソッドは、Habrを開いて、特定のユーザーの下で認証することができます。
PS:たくさんのボタンをクリックして2つのサイトでも10ページを閲覧する必要がある場合、バグのテストケースの再生を自動化することがよくあります。