Pokaż wyniki 1 do 1 z 1

Temat: Headless browser

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie Headless browser

    Cześć.
    Napisałem sobie sofcik, który używa headless-browser do sprawdzania nowych video na YT, nowych postów na forum, nowych wpisów na blogu itp.
    Ogólnie chodzi o to, żebym nie robił tego ręcznie, informacja o nowościach pojawia się w konsoli.
    Niektóry z Was na pewno znają ten problem... Pracujesz nad czymś trudniejszym, gapisz się w miniator, wytężasz mózgownice, po chwili już jesteś na YT, albo sprawdzasz pocztę, zamiast myśleć dalej nad problemem :-)
    Ten skrypt pozbawia mnie praktycznie każdego pretekstu oderwania się od pracy.

    Aby go odpalić musisz pobrać PhantomJS.

    Kod:
    var pages = [
    {
    	url: 'http://www.youtube.com/user/HuskyStarcraft/videos',
    	loop: 900,
    	callback: function() {
    		
    		var self = this
    		
    		self.callbackFire = false
    		
    		var result = self.evaluate(function(){
    			
    			var newVideo = document.querySelector('.channel-videos-list li h3').title
    			var oldVideo = localStorage.getItem( location.href )
    			
    			if ( newVideo === oldVideo ) {
    				return false
    			}
    			
    			localStorage.setItem( location.href, newVideo )
    			
    			return newVideo
    		})
    		
    		if ( false !== result ) {
    			console.log( 'New Husky Video: '+ result )
    		}
    		
    		setTimeout(function(){
    			
    			self.callbackFire = true
    			
    			// refresh page...
    			self.evaluate(function(){
    				location.reload( true )
    			})
    			
    		}, self.loop * 1000)
    		
    	}
    },
    {
    	url: 'http://www.youtube.com/user/HDstarcraft/videos',
    	loop: 900,
    	callback: function() {
    		
    		var self = this
    		
    		self.callbackFire = false
    		
    		var result = self.evaluate(function(){
    			
    			var newVideo = document.querySelector('.channel-videos-list li h3').title
    			var oldVideo = localStorage.getItem( location.href )
    			
    			if ( newVideo === oldVideo ) {
    				return false
    			}
    			
    			localStorage.setItem( location.href, newVideo )
    			
    			return newVideo
    		})
    		
    		if ( false !== result ) {
    			console.log( 'New HD Video: '+ result )
    		}
    		
    		setTimeout(function(){
    			
    			self.callbackFire = true
    			
    			// refresh page...
    			self.evaluate(function(){
    				location.reload( true )
    			})
    			
    		}, self.loop * 1000)
    		
    	}
    },
    {
    	url: 'http://www.youtube.com/user/RayWilliamJohnson/videos',
    	loop: 900,
    	callback: function() {
    		
    		var self = this
    		
    		self.callbackFire = false
    		
    		var result = self.evaluate(function(){
    			
    			var newVideo = document.querySelector('.channel-videos-list li h3').title
    			var oldVideo = localStorage.getItem( location.href )
    			
    			if ( newVideo === oldVideo ) {
    				return false
    			}
    			
    			localStorage.setItem( location.href, newVideo )
    			
    			return newVideo
    		})
    		
    		if ( false !== result ) {
    			console.log( 'New RWJ Video: '+ result )
    		}
    		
    		setTimeout(function(){
    			
    			self.callbackFire = true
    			
    			// refresh page...
    			self.evaluate(function(){
    				location.reload( true )
    			})
    			
    		}, self.loop * 1000)
    		
    	}
    },
    {
    	url: 'http://www.rybinski.eu/',
    	loop: 900,
    	callback: function() {
    		
    		var self = this
    		
    		self.callbackFire = false
    		
    		var result = self.evaluate(function(){
    			
    			var newPost = document.querySelector('#content-container div h2 a').childNodes[0].nodeValue
    			var oldPost = localStorage.getItem( location.href )
    			
    			if ( newPost === oldPost ) {
    				return false
    			}
    			
    			localStorage.setItem( location.href, newPost )
    			
    			return newPost
    		})
    		
    		if ( false !== result ) {
    			console.log( 'New Rybinski Post: '+ result )
    		}
    		
    		setTimeout(function(){
    			
    			self.callbackFire = true
    			
    			// refresh page...
    			self.evaluate(function(){
    				location.reload( true )
    			})
    			
    		}, self.loop * 1000)
    		
    	}
    }
    ]
    
    for ( key in pages ) {
    	
    	(function(args){
    		
    		var page = require('webpage').create();
    		
    		page.callback = args.callback
    		
    		page.callbackFire = true
    		
    		page.loop = pages[ key ].loop
    		
    		page.onLoadFinished = function( result ){
    			
    			if ( true !== page.callbackFire ) {
    				return false
    			}
    			
    			var state = page.evaluate(function(){
    				return document.readyState
    			})
    			if ( 'complete' !== state ) {
    				setTimeout( page.onLoadFinished, 1000 )
    			}
    			else {
    				page.callback.call( page )
    			}
    		}
    		
    		page.open( args.url )
    		
    	})(pages[ key ])
    }

    Jeśli macie ciekawe przykłady wykorzystania headless-browser'ów, wrzucajcie do tego tematu.

    Pozdro600
    Ostatnio edytowane przez lame : 04-24-2012 - 17:29
    światło mądrości oświetla drogę z nikąd do nikąd

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj