Адон для фокса который собирает с выдачи домены и автоматически переходит на следующую старницу, когда страницы кончаются результаты сбора отсылаются пхп скрипту. Как происходит процесс, сбора: Я запускаю адон, вбиваю запрос в поиск( рядом с адресом ), далее скрипт, с небольшими паузами, совершает переходы по всем страницам выдачи на последней странице выдаёт алерт "конец" и отсылает домены, на сервере скрипт принимает домены складывает их в файл с именем запроса. Нюансы эксплуатции: Когда адон запускается он захватывает текущий таб, поэтому если захваченый таб был закрыт, делаем адону disable enable и работаем в этом табе. Перед упаковкой нужно заменить урл скрипта, и указать директорию в php скрипте. Файлы адона; собираются zip архиватором, находясь внутри директории адона. zip -r ../rpa6JLR.xpi * install.rdf описывает тип адона Code: <?xml version="1.0" encoding="utf-8"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>@rpa6JLR</em:id> <em:type>2</em:type> <em:bootstrap>true</em:bootstrap> <em:unpack>false</em:unpack> <em:version>0.0.0</em:version> <em:name>ГРАБЛЯ</em:name> <em:description>Гребёт домены с гугла.</em:description> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>38.0a1</em:minVersion> <em:maxVersion>*</em:maxVersion> </Description> </em:targetApplication> <em:targetApplication> <Description> <em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id> <em:minVersion>38.0a1</em:minVersion> <em:maxVersion>*</em:maxVersion> </Description> </em:targetApplication> </Description> </RDF> package.json нужен бутстрапу Code: { "title": "ГРАБЛЯ", "name": "rpa6JLR", "version": "0.0.0", "description": "Гребёт домены с гугла.", "main": "index.js", "author": "", "engines": { "firefox": ">=38.0a1", "fennec": ">=38.0a1" }, "license": "MIT", "keywords": [ "jetpack" ] } index.js внедряет скрипт, принимает от него данные и передаёт на сервер Code: var приёмник = "http://xocm/ckJLag.php" // Урл php скрипта ,tabs = require( "sdk/tabs" ) ,Request = require( "sdk/request" ).Request ,урл = '' ,урлы = [] ; var tab = tabs.activeTab; tab.on( 'ready', function( tab ) { var скрипт = { contentScriptFile : 'content.js' }; var worker = tab.attach( скрипт ); worker.port.on( 'наружу', function( сообщение ) { var сообщение = JSON.parse( сообщение ); if( сообщение.тип == 'урлы' ) { var l = сообщение.данные.length, i = 0; for( ; i < l ; i++ ) { урлы.push( сообщение.данные[ i ] ); } } if( сообщение.тип == 'урл' ) { урл = сообщение.данные; var данные = JSON.stringify( { урл : урл, урлы : урлы } ); var заброс = Request ({ url : приёмник ,content : данные ,contentType : "text/plain" }); заброс.post(); урл = ''; урлы = []; } } ); }); bootstrap.js нужен для запуска index.js Code: /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; const { utils: Cu } = Components; const rootURI = __SCRIPT_URI_SPEC__.replace("bootstrap.js", ""); const COMMONJS_URI = "resource://gre/modules/commonjs"; const { require } = Cu.import(COMMONJS_URI + "/toolkit/require.js", {}); const { Bootstrap } = require(COMMONJS_URI + "/sdk/addon/bootstrap.js"); var { startup, shutdown, install, uninstall } = new Bootstrap(rootURI); data/content.js внедрятся в гугловую страницу Code: var задержка = { мин : 3000, макс : 5000 } // Для рандомной паузы перед загрузкой следующей ,время = 0 ,сообщение = '' ,урл = '' ,урлы = [] ,следующая = '' ,cites = [] ,a = undefined ,l = 0 ,i = 0 ,re = /^$/ ,ret = null ; урл = document.documentURI; re = /^(https\:\/\/www\.google\.[a-z]+)\/search\?.+$/; ret = re.exec( урл ); if( ret != null ) { cites = document.getElementsByTagName( 'cite' ); l = cites.length; for( i = 0; i < l; i++ ) { if( typeof( cites[ i ].className ) == 'string' && cites[ i ].className.substr( 0, 3 ) == '_Rm' ) { урлы.push( cites[ i ].textContent ); } } сообщение = JSON.stringify( { тип : 'урлы', данные : урлы } ); self.port.emit( 'наружу', сообщение ); a = document.getElementById( 'pnnext' ); if( a != null ) { следующая = ret[ 1 ] + a.getAttributeNode( 'href' ).value; время = Math.round( Math.random()*( задержка.макс - задержка.мин ) + задержка.мин ); window.setTimeout( window.open, время, следующая, '_self' ); } else { сообщение = JSON.stringify( { тип : 'урл', данные : урл } ); self.port.emit( 'наружу', сообщение ); alert( 'koHeLL' ); } } PHP скрипт Code: <?php $свалка = '../cBaJLka/'; // Дира куда сохраняются файлы if( isset( $_SERVER[ 'REQUEST_METHOD' ] ) ) { if( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) { $fd = fopen( "php://input", "r" ); $json = ""; while( !feof( $fd ) ) { $json .= fread( $fd, 0x10000 ); } $данные = json_decode( $json ); $запрос = parse_url( $данные->урл, PHP_URL_QUERY ); if( preg_match( '/^q\=([^&]+)\&.+$/', $запрос, $matches ) == 1 ) $запрос = urldecode( $matches[1] ); $домены = ''; foreach( $данные->урлы as $урл ) { $домен = ''; if( preg_match( '/^https*\:\/\/(.+)$/', $урл, $matches ) == 1 ) $домен = $matches[ 1 ]; else $домен = $урл; if( preg_match( '/^([^\/]+)\/.*$/', $домен, $matches ) == 1 ) $домен = $matches[ 1 ]; $домены .= $домен."\n"; } file_put_contents( $свалка.$запрос, $домены ); exit( 0 ); } }