"ГРАБЛЯ" сгребать домены с гугла.

Discussion in 'ПО для Web разработчика' started by randomword0x3f52, 6 Nov 2016.

  1. randomword0x3f52

    Joined:
    15 Oct 2016
    Messages:
    30
    Likes Received:
    25
    Reputations:
    9
    Адон для фокса который собирает с выдачи домены и автоматически переходит на следующую старницу, когда страницы кончаются результаты сбора отсылаются пхп скрипту.

    Как происходит процесс, сбора: Я запускаю адон, вбиваю запрос в поиск( рядом с адресом ), далее скрипт, с небольшими паузами, совершает переходы по всем страницам выдачи на последней странице выдаёт алерт "конец" и отсылает домены, на сервере скрипт принимает домены складывает их в файл с именем запроса.

    Нюансы эксплуатции: Когда адон запускается он захватывает текущий таб, поэтому если захваченый таб был закрыт, делаем адону 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 );
    		}
    	}