none
Trova parola all'interno pagina web RRS feed

  • Domanda

  • Buongiorno ,

    Ho intenzione di realizzare un piccolo software che mi sta dando tanti problemi. Il software mi serve per controllare un sito per ordinare prodotti. Voglio che quando sono disponibili mi apre la pagina automaticamente e mi avverta. Attualmente per controllare la pagina utilizzo un plugin di aggiornamento automatico della pagina di firefox , questo però mi costringe a tenere sempre visibile la finestra e stare al pc.

    Brevemente vi spiego il mio progetto in cosa consiste:

    Dentro una text inserire un url ....selezionando una checkbox verifica la presenza di una parola nella pagina web e se presente mi apre direttamente la pagina sul mio browser predefinito.  Avevo utilizzato il System.Diagnostics.Process.Start(link.Text) e ha funzionato alla grande.

    Ma...........ho iniziato a far il programma pensando di estrarre il codice HTML per poi controllare la presenza o no della parola prestabilita. Il tutto funzionava però il sito che dovrei verificare la presenza della parola è molto complesso , collegato a un database e presenta script. La presenza della parola viene segnalata sempre perchè risulta presente nel codice sorgente della pagina anche se in relatà non è presente quando visualizzo la pagina.( scusate il giro di parole..spero di essere stata chiara ). Quindi questa strada non è percorribile.

    Qulacuno è così gentile da aiutarmi nel realizzarlo? Non ho più idee su come realizzarlo.

    P.s.Mi piacerebbe che questo seleziono la checkbox e quindi avvio l'intero programma che mi verifica la pagina abbia un timer che controlli la pagina ogni minuto. Ma questo è un problema secondario.

    Grazie per l'attenzione e per l'aiuto.

    domenica 4 marzo 2012 14:13

Risposte

  • Sono due controlli molto semplici.

    WebBrowser permette di visualizzare pagine Web all'interno della tua applicazione:

    Come tutti gli altri controlli, lo trovi nella Toolbox di Visual Studio. Qui trovi la sua descrizione: http://msdn.microsoft.com/it-it/library/system.windows.forms.webbrowser.aspx.

    Nel tuo caso, lo devi usare per caricare la pagina che ti interessa. Ne hai bisogno perché, come detto, la parte che ti interessa viene valorizzata dopo il caricamento vero e proprio della pagina, quindi una semplice WebRequest non va bene (perché essa ti restituisce solo l'HTML "statico", mentre tu hai bisogno di un valore dinamico).

    Se poi non vuoi visualizzare la pagina Web nella tua applicazione, ti basta impostare la proprietà Visibile del controllo su False (ma almeno all'inizio, ti consiglio di mantenerlo visibile, così puoi renderti conto di come funziona).

    Quindi, nel tuo evento attivazione_Click, al posto del codice attuale, devi semplicemente inserire l'istruzione con cui carichi la pagina richiesta nel WebBrowser:

    Private Sub attivazione_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles attivazione.CheckedChanged
    
        WebBrowser1.Navigate(link.Text)
    
    End Sub

    Quando la pagina viene caricata, il WebBrowser genera l'evento DocumentCompleted. Al suo interno, devi avviare l'altro controllo di cui ti dicevo, ovvero il Timer, che serve per eseguire attività periodiche: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx.

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Timer1.Enabled = True
    End Sub

    Anche il controllo Timer lo trovi nella Toolbox. Dopo averlo aggiunto, comparirà in una barra in basso, sotto la tua form. Vai nella finestra delle proprietà ed imposta la sua proprietà Interval, che indica ogni quanti millisecondi deve scattare. Metti ad esempio 1000 (quindi un secondo).

    Infine, devi gestire l'evento Tick e controllare se nella pagina web è contenuta la parola disponibile:

    Private Sub Timer1_Tick(sender AS Object, e As EventArgs) Handles Timer1.Tick
    
        If attivazione.Checked = True Then
            ' Recupera il valore della pagina
            Dim value = WebBrowser1.Document.GetElementById("availabilityValue").InnerText
            If value.ToLower() = "disponibile" Then
                ' La valore è quello corretto. Apre il Browser.
                Timer1.Enabled = False
                System.Diagnostics.Process.Start(link.Text)
            End If
        End If
    End Sub

    Questo è tutto quello che ti serve. Prova ad inserire questi algoritmi nel tuo programma e guarda cosa succede. Ti consiglio anche di mettere qualche punto di interruzione e seguire l'esecuzione passo-passo, così puoi renderti conto del suo funzionamento.

    Tranquilla, io sono sempre felice di poter dare una mano :-)


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Modificato Marco MinervaMVP domenica 4 marzo 2012 16:59
    • Contrassegnato come risposta vale89 domenica 4 marzo 2012 19:48
    domenica 4 marzo 2012 16:59

Tutte le risposte

  • Se sai come identificare la parola, ovvero se ad esempio è contenuta sempre in una certa label, in una casella di testo con un determinato ID, ecc., puoi usare l'HtmlAgilityPack, http://htmlagilitypack.codeplex.com/, che ti permette di effettuare una ricerca "mirata" all'interno degli oggetti della pagina (quindi qualcosa di più raffinato rispetto ad una classica ricerca testuale).

    Se ci fornisci l'URL del sito che vuoi verificare e un esempio della parola che cerchi, potremmo darti indicazioni più precise.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 14:45
  • La pagina non è accessibile se non si effettua il login. Posso però pubbliccare l'intero codice sorgente qui. ( vi avverto che è abbastanza lungo)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xml:lang="it" lang="it" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="Author" content="Jakala">
    <link rel="stylesheet" href="/xsl/ita/portaleincentive/solutions/blurum/css/base.css" media="all">
    <!--[if lt IE 7]>
    		<link rel="stylesheet" href="/xsl/ita/portaleincentive/solutions/blurum/css/base_ie6.css" media="all" />
    		<link rel="stylesheet" href="/xsl/ita/portaleincentive/solutions/blurum/css/custom_ie6.css" media="all" />
    		<![endif]-->
    <script type="text/javascript" src="/xsl/ita/portaleincentive/solutions/blurum/js/base.js"></script>
    <title>Blurum - Pointbox - Home</title>
    <script>
                                        var pwdCheck = 'N';
                                        
                                        function verificaDisponibilita(code,imgPath){
                                            var xhr = getXMLHttpRequest();
                                            xhr.onreadystatechange=function(){
                                                if(xhr.readyState==4){
                                                    evaluateResponse(xhr.responseText, imgPath);
                                                }
                                                else{
                                                    // In attesa della risposta del form visualizzo il msg di attesa
                                                    showWait();
                                                }
                                            }
                                            var params = 'cdProd=' + code;
                                            //xhr.open("POST","/portaleincentive/base/main/AvailabilityCheck.jsp",true);
                                            xhr.open("POST","/portaleincentive/solutions/blurum/main/AvailabilityCheck.jsp",true);
                                            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                                            xhr.setRequestHeader("Content-length", params.length);
                                            xhr.setRequestHeader("Connection", "close");
                                            xhr.send(params);
                                        }
                                        
                                        function getXMLHttpRequest(){
                                            var xmlHttp;
                                            try{
                                                // Firefox, Opera 8.0+, Safari
                                                xmlHttp=new XMLHttpRequest();
                                            }
                                            catch (e){
                                                // Internet Explorer 6.0 +
                                                try{
                                                    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                                                }
                                                catch (e){
                                                    // Internet Explorer 5.5 +
                                                    try{
                                                        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                                                    }
                                                    catch (e){
                                                        alert("Your browser does not support AJAX!");
                                                        return false;
                                                    }
                                                }
                                            }
                                            return xmlHttp;
                                        }
                                        
                                        function showWait(){
                                            var l = document.getElementById("availability");
                                            if (l){
                                                l.className = "wait";
                                                l.innerHTML = "Verifica disponibilit&agrave;...";
                                            }
                                        }
                                        
                                        function trimma(str){
                                          return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                                        }
                                        
                                        function evaluateResponse(resp, imgPath){
                                        
                                        	if (resp!=null) resp = trimma(resp);  
                                        	//alert('resp vale:'+resp);
                                            // mappa della stringa di risposta:
                                            // posizione d: disponibilita, posizione l: disponibilita limitata 
                                            var disp = '';
                                            if (pwdCheck == 'S') {                                      
                                                disp = '<a href="#" onclick="pwdSubmit();" ><img src="' + imgPath + 'btn_order.jpg" alt="Ordina" width="100" height="77" /></a>';
                                            } else {                                     
                                                disp = '<a href="#" onclick="addSelectedItemCode();" ><img src="' + imgPath + 'btn_order.jpg" alt="Ordina" width="100" height="77" /></a>';
                                            }
                                            
                                            var limited_disp = '<a href="#" onclick="addSelectedItemCode()" ><img src="' + imgPath + 'btn_limited.png" alt="Disponibilità Limitata" width="66" height="66" /></a>';
                                            var prenotabile = '<img src="' + imgPath + 'btn_bookable.png" alt="Prodotto Prenotabile" width="66" height="66" /></a>';
                                            var notDisp = '<img src="' + imgPath + 'btn_esaurito.jpg" alt="Esaurito" width="100" height="77" align="left" hspace="5" />Articolo in arrivo. Presto sar&agrave; nuovamente disponibile.'; 
                                            var riass = '<img src="' + imgPath + 'btn_esaurito.jpg" alt="Riassortimento" width="100" height="77" align="left" hspace="5" />Prodotto esaurito: prossimo riassortimento.';
                                            var errPrezzo = '<img src="' + imgPath + 'btn_esaurito.jpg" alt="Prezzo non calcolabile" width="100" height="77" align="left" hspace="5" />Prezzo non calcolabile.'; 
                                            document.getElementById("availability").className = "";
                                            
                                            posEcc = resp.indexOf("ecc")
                                            if (posEcc>-1) {
                                            	document.getElementById("availability").innerHTML = errPrezzo;
                                            	document.getElementById("availabilityValue").innerHTML = '<span style="color:red;">prezzo non calcolabile</span>';
                                            }
                                            else{                                 
    	                                        posd = (trimma(resp)).indexOf("riassortimento");
    	                                        if (posd==0){
    	                                        	document.getElementById("availability").innerHTML = riass;
    		                                        document.getElementById("availabilityValue").innerHTML = '<span style="color:red;">in riassortimento</span>';
    	                                        }
    	                                        else{                                        
    		                                        posd = resp.indexOf("d1");
    		                                        if (resp.charAt(posd + 1) == 1){
    		                                            document.getElementById("availability").innerHTML = disp;
    		                                            document.getElementById("availabilityValue").innerHTML = '<span style="color:green;">disponibile</span>';
    		                                        }
    		                                        else{
    		                                            posb = resp.indexOf("b1");
    		                                            if (resp.charAt(posb + 1) == 1){
    		                                                document.getElementById("availability").innerHTML = disp;
    		                                                document.getElementById("availabilityValue").innerHTML = '<span style="color:green;">disponibile</span>';
    		                                                document.getElementById("bookability").innerHTML = prenotabile;
    		                                                document.getElementById("availabilityValue").innerHTML = '<span style="color:green;">disponibile</span>';
    		                                            }
    		                                            else{
    		                                                document.getElementById("availability").innerHTML = notDisp;
    		                                                document.getElementById("availabilityValue").innerHTML = '<span style="color:red;">esaurito</span>';
    		                                            }
    		                                        }
    		                                        posl = resp.indexOf("l1");
    		                                        //if (resp.charAt(posl + 1) == 1){
    		                                            //document.getElementById("limitedAvailability").innerHTML = limited_disp;
    		                                            //document.getElementById("limitedAvailability").innerHTML = disp;
    		                                        //}
    		                                  }     
    	                                    }  
    	                                }
                                        
                                        // chiamata ajax per pwd
                                        function pwdSubmit(){
                                            var xhr = getXMLHttpRequest();
                                            xhr.onreadystatechange=function(){
                                                if(xhr.readyState==4){
                                                    evaluateResponseCheckPwd(xhr.responseText);
                                                }
                                                else{
                                                    // In attesa della risposta del form visualizzo il msg di attesa
                                                    //showWait();
                                                }
                                            }
                                            //alert(document.pass1.code.value);
                                            var params = "code=" + document.pass1.code.value;
                                            xhr.open("POST","/portaleincentive/solutions/blurum/main/catalog/checkPwd.jsp",true);
                                            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
                                            xhr.setRequestHeader("Content-length", params.length);
                                            xhr.setRequestHeader("Connection", "close");
                                            xhr.send(params);   
                                        }
     
                                        function evaluateResponseCheckPwd(resp) {
                                            var risposta = getValore(resp,"RISPOSTA");
                                            if(risposta=='S') {
                                                addSelectedItemCode();
                                            } else {
                                                alert("Non \350 possibile ordinare questo articolo senza inserire la relativa password. E' un regalo riservato alle Aziende!");
                                            }
                                        }
    
                                        // ****************** UTILITA PER ESTRARE I CAMPI TIPO XML DA UNA RESPONSE AJAX + TAG
                                        // resp: stringa che contiene la pagina di risposta sotto forma di xml
                                        // tag: tag da cui estrarre il valore
    
                                        function getValore(resp,tag){
                                            tagI ="<"+tag+">";
                                            tagF ="</"+tag+">";
                                            if(resp.indexOf(tagF)<0) return;
    
                                            temp1 = resp.substr(resp.indexOf(tagF));
                                            temp2 = resp.substr(resp.indexOf(tagI)+tagI.length  );
                                            temp = temp2.replace(temp1,"");
    
                                            return temp;
                                        }
                                        function $(id) { return document.getElementById(id) }
                                        
                                    </script>
    
    <style>
                                        .wait {
                                            background:#fff url(/images/ita/portaleincentive/solutions/promobox/loading.gif) no-repeat center 30px;
                                            border: solid 2px #ccc;
                                            width: 150px;
                                            height: 50px;
                                            text-align:center;
                                            padding: 10px;
                                            z-index: 1000;
                                        }
                                    </style>
    </head>
    <body onload="verificaDisponibilita(65483, '/images/ita/portaleincentive/solutions/promobox/')">
    <div id="baseShelf">
    <!-- accessibility toolbar -->
    </div>
    <div id="baseHeader">
    <!-- empty -->
    </div>
    <div id="baseAlerts">
    <!--empty-->
    </div>
    <div id="baseMain">
    <div id="mainHeader"></div>
    <div id="mainPage">
    <div class="compCatalogSearchBox minHeight100">
    
    <form name="_catalogSearchBox" action="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp">
    <input type="hidden" name="cdIncMacroGroup" value=""><input type="hidden" name="cdCampaign" value=""><input type="hidden" name="cdView" value=""><input type="hidden" name="points" value=""><script type="text/javascript">
                        function csbSubmit()
                        {
                        var form = document.forms["_catalogSearchBox"];
                        if (!/^\d+$/.test(form.pointsFrom.value) || !/^\d+$/.test(form.pointsTo.value) )
                        {
                        alert("E' necessario riempire entrambi i campi con soli numeri.");
                        return false;
                        }
                        
                        form.points.value = form.pointsFrom.value + '-' + form.pointsTo.value;
                        form.submit();
                        }
                    </script>
    <fieldset>
    <div class="group">
    <img src="/images/ita/portaleincentive/solutions/promobox/txt_puntivuoiusare.png" width="204" height="18" alt="Quanti punti vuoi usare?"><label class="double field"><span>Da:</span><input type="text" name="pointsFrom"></label><label class="double field"><span>A:</span><input type="text" name="pointsTo"></label>
    </div>
    </fieldset>
    <fieldset>
    <div class="group">
    <a href="#" onclick="csbSubmit()" type="submit" value="" class="button"><span>Cerca</span></a>
    </div>
    </fieldset>
    </form>
    
    <div class="capBottom">
    <div class="right">
    <!--empty-->
    </div>
    <div class="left">
    <!--empty-->
    </div>
    </div>
    </div>
    <div id="pageHeader">
    <div class="container">
    <div class="col1">
    <p id="logo">
    <a title="www.promobox.it" href="http://www.promobox.it"><strong class="forAccessOnly">PromoBox</strong></a>
    </p>&nbsp;
    				</div>
    
    <div class="colFourth">
    <div class="compBox">
    <div class="title">
    <img src="/images/ita/portaleincentive/solutions/promobox//txt_ricerca.png" width="66" height="16" alt="Ricerca"></div>
    <form name="search" action="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp" method="post">
    <input type="hidden" name="cdView" value=""><input type="hidden" name="cdCampaign" value=""><input type="hidden" name="cdIncMacroGroup" value="">
    <fieldset>
    <div class="group">
    <label class="multiple field"><span>prodotto o marchio</span><input name="word" class="search" type="text" size="20" value=""><button type="submit" name="field" value="" class="buttonIcon"></button></label>
    </div>
    </fieldset>
    </form>
    </div>
    </div>
    <div class="colFourth">
    <div class="compBox">
    
    <p>Punti disponibili: <b>8613</b>
    </p>
    <p>Il  <a href="/portaleincentive/base/main/redemption/Basket.jsp">carrello</a> &egrave; vuoto.</p>
    </div>
    </div>
    <div class="colFourth">
    <p id="logoCustomer" style="background-image:url('/images/ita/portaleincentive/solutions/promobox/ logoBlurum.jpg')">
    <a href=""><strong class="forAccessOnly"></strong></a>
    </p>&nbsp;
    	</div>
    
    </div>
    <div class="compForceClear"></div>
    <div class="container">
    <div id="menu" class="compListHorizontal">
    <div class="capRight">
    <!--empty-->
    </div>
    <div class="capLeft">
    <!--empty-->
    </div>
    <h3 class="forAccessOnly">Menu principale</h3>
    <ul class="compListHorizontal">
    <li class="first">
    <a href="/portaleincentive/solutions/blurum/main.jsp?fromHome=1" class="button home selected"><span class="forAccessOnly">Home</span></a>
    </li>
    
    <li>
    <a href="/portaleincentive/base/main/redemption/Basket.jsp" class="button basket "><span class="forAccessOnly">Carrello</span></a>
    </li>
    <li>
    <a href="/portaleincentive/base/main/ordermanagement/OrderManagement.jsp" class="button order "><span class="forAccessOnly">Stato ordini</span></a>
    </li>
    <li></li>
    <li></li>
    <li></li>
    <li class="last"></li>
    </ul>
    </div>
    </div>
    <div class="compForceClear"></div>
    </div>
    
    <div id="pageBody">
    <div class="container compHeaderUser">
    <div class="colHalf">
    <div class="compWelcome">
    <h4>Benvenuto, <i>Valentina&nbsp;Alauria</i>
    </h4>
    </div>
    </div>
    <div class="colHalf right">
    <form action="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp" name="sectorCat">
    <input type="hidden" name="cdView" value=""><input type="hidden" name="cdIncMacroGroup" value=""><input type="hidden" name="cdCampaign" value=""><input type="hidden" name="itemsPerPage" value="24"><select name="cdArea" onChange="javascript:goSectorCat(); "><option name="none" value="null">Seleziona un settore</option><option value="5">Special Offer</option><option value="1" selected>Hi Tech</option><option value="2">Viaggi</option><option value="3">Voucher</option><option value="4">Shopping</option><option name="none" value="100" onclick="javascript:location.href='/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=9303';">Proposte speciali Blurum</option></select>
    
    </form>
    </div>
    </div>
    <div class="container compHeaderSection">
    <div class="col1">
    <span class="title"><img src="/images/ita/portaleincentive/solutions/promobox//txt_catalogo.png" width="94" height="25" alt="Contattaci"></span>
    </div>
    <div class="col2">
    <span class="message"></span>
    </div>
    </div>
    <div class="container">
    <div class="col1">
    <!--empty-->
    <ul class="listCompVertical catalogSectors">
    <li id="lev-1-1">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7848">Audio&nbsp;(71)</a>
    
    </li>
    <li id="lev-1-2">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7840">Climatizzazione&nbsp;(20)</a>
    </li>
    <li id="lev-1-3">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7851">Computer e periferiche&nbsp;(56)</a>
    </li>
    <li id="lev-1-4">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7847">Console games&nbsp;(44)</a>
    </li>
    <li id="lev-1-5">
    
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7838">Cottura cibi&nbsp;(42)</a>
    </li>
    <li id="lev-1-6">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7843">Fotocamere&nbsp;(28)</a>
    </li>
    <li id="lev-1-7">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7833">Frigoriferi e congelatori&nbsp;(28)</a>
    </li>
    <li id="lev-1-8">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7829">Lavaggio e asciugatura&nbsp;(26)</a>
    
    </li>
    <li id="lev-1-9">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7841">Personal care&nbsp;(61)</a>
    </li>
    <li id="lev-1-10">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7837">Preparazione cibi&nbsp;(135)</a>
    </li>
    <li id="lev-1-11">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7839">Pulizia e stiro&nbsp;(63)</a>
    </li>
    <li id="lev-1-12">
    
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7845">Sistemi gps&nbsp;(7)</a>
    </li>
    <li id="lev-1-13">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7846">Telefonia&nbsp;(44)</a>
    <ul id="lev-2-0" class="indent_1">
    <li id="lev-2-1">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=8249">Cellulari&nbsp;(7)</a>
    </li>
    <li id="lev-2-2">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=8250" class="selected">SmartPhone&nbsp;(14)</a>
    
    </li>
    <li id="lev-2-3">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=8252">Cordless&nbsp;(18)</a>
    </li>
    <li id="lev-2-4">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=8255">Auricolare Telefono Cellulare&nbsp;(5)</a>
    </li>
    </ul>
    </li>
    <li id="lev-1-14">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7842">Tv&nbsp;(43)</a>
    
    </li>
    <li id="lev-1-15">
    <a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdIncMacroGroup=&amp;cdCampaign=&amp;cdArea=1&amp;cdView=&amp;itemsPerPage=24&amp;page=1&amp;sector=7849">Video&nbsp;(44)</a>
    </li>
    </ul>
    </div>
    <div class="col2">
    <div class="content minHeight400">
    <div class="catalogContainer">
    <h2>SmartPhone</h2>
    <div class="productSchedule">
    <h2>Samsung Smartphone Galaxi Ace GT-S5830</h2>
    <div class="imgBox">
    
    <img src="/images/ita/catalog/product/p365483.jpg" width="160" height="200" alt="Samsung Smartphone Galaxi Ace GT-S5830"></div>
    <ul class="productSpec compListVertical">
    <li>
    <span class="key"><b>Codice Prodotto</b></span><span class="value">65483</span>
    </li>
    <li>
    <span class="key"><b>Valore</b></span><span class="value points">9294</span>
    </li>
    <li>
    <span class="key">Disponibilit&agrave;</span><span id="availabilityValue" class="value">-</span>
    </li>
    
    <li>
    <span class="key">Altri prodotti marchiati </span><span class="value"><a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?brand=256">Samsung</a></span>
    </li>
    <li>
    <span class="key">Altri prodotti tipo </span><span class="value"><a href="/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?sector=8250">SmartPhone</a></span>
    </li>
    </ul>
    <form action="#" name="attributeSelector">
    <input type="hidden" name="itemCode" value="2000262">
    </form>
    <ul class="commandBar compListHorizontal">
    <li class="cmdOrder" id="availability"></li>
    <li class="cmdOrder" id="bookability"></li>
    
    <li class="cmdOrder" id="limitedAvailability"></li>
    <li class="cmdZoom" style="">
    <a href="#" onclick="zoomIn('p365483.jpg');"><img src="/images/ita/portaleincentive/solutions/promobox/txt_zoom.png" width="49" height="14" alt="Zoom"></a>
    </li>
    <li class="cmdPrint" style="float:right;margin-right:15px">
    <a href="#" onclick="fprint()"><img src="/images/ita/portaleincentive/solutions/promobox/txt_stampa.png" width="61" height="14" alt="Stampa"></a>
    </li>
    <form name="pass1">
    <input type="hidden" name="code">
    <br>
    </form>
    </ul>
    <div class="description"><p>Lo Smartphone Samsung GT-S5830 Galaxi Ace &egrave; un modello equilibrato, con un discreto bagaglio tecnologico che comprende, tra l&rsquo;altro, WiFi, ricevitore GPS e Bluetooth. Il sistema operativo &egrave; la versione 2.2 (Froyo) di Android di Google che assicura una ricca personalizzazione e versatilit&agrave; in ogni occasione. Dimensioni (mm) 59.9&times;112.4&times;11.5mm Peso (gr.) 113g Display Tipo display 3.5&quot; HVGA 16M TFT. Fotocamera da 5 megapixel con flash. Memoria interna 150 MB + possibilit&agrave; di espansione con microSD o microSDHC fino a 32 GB (scheda di memoria venduta separatamente).</p></div>
    
    </div>
    </div>
    </div>
    <div class="capBottom">
    <div class="right">
    <!--empty-->
    </div>
    <div class="left">
    <!--empty-->
    </div>
    </div>
    </div>
    </div>
    </div>
    <div id="pageFooter">
    <!--empty-->
    </div>
    
    </div>
    <div id="pageFooter">
    <!--empty-->
    </div>
    </div>
    <div id="baseFooter">
    <div class="container">
    <div>
    <div class="content compCopyright">
    <div class="compForceClear"></div>
    <p>&copy; 2011 Blurum Italia Srl - Tutti i diritti riservati | P. IVA 05048370968 | Societ&agrave; soggetta ad attivit&agrave; di direzione e coordinamento da parte di Blurum Srl</p>
    
    </div>
    </div>
    <div class="colHalf right"></div>
    </div>
    </div>
    <form name="addToBasketForm" method="post" action="/portaleincentive/solutions/blurum/main/redemption/Basket.jsp">
    <input type="hidden" name="pwd" value=""><input type="hidden" name="cdJItem" value=""><input type="hidden" name="isBooked" value=""><input type="hidden" name="selfLiquidation" value=""><input type="hidden" name="pointSelfLiq" value=""><input type="hidden" name="euroSelfLiq" value=""><input type="hidden" name="selfLiqCounter" value=""><input type="hidden" name="itemPP" value="N"><input type="hidden" name="cdCampaign" value="51854"><input type="hidden" name="itemQuantity" value="1"><input type="hidden" name="status" value="insert">
    </form>
    </body>
    </html>
    

    Questa è la pagina del codice sorgente qui sopra. Come vedete il prodotto dice "in riassortimento". Quando è disponibile compare la scritta "disponibile"

     

    domenica 4 marzo 2012 15:05
  • Supponendo che tu usi un controllo WebBrowser per caricare la pagina nel tuo form, puoi gestire l'evento DocumentCompleted e cercare il valore che ti serve:

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Dim value = WebBrowser1.Document.GetElementById("availabilityValue").InnerText
    End Sub

    availabilityValue è l'ID del controllo nell'HTML  in cui appare la scritta che ti interessa.

    Ho però notato che il valore della disponibilità viene inserito nella pagina dopo il caricamento, tramite una chiamata asincrona, quindi nell'evento DocumentCompleted potresti non avere ancora il valore corretto. L'approccio giusto, quindi, è usare un timer per eseguire periodicamente il metodo GetElementById che ti ho mostrato.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 15:20
  • Provo a lavorarci un pò su. Intanto ti ringrazio per l'aiuto. Nel caso che ho problemi ti faccio sapere.
    domenica 4 marzo 2012 15:34
  • Di niente, tienici aggiornati!

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 15:37
  • Sto facendo un pò di confusione. Io avevo fatto questo programma che come spiegavo prima mi dava come risultato sempre presente la parola e mi apriva il link sul mio browser predefinito.

    Imports System.Net
    Imports System.IO
    
    Public Class Form1
    
        Private Sub attivazione_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles attivazione.CheckedChanged
    
            'variabili
            Dim inStream As StreamReader
            Dim webRequest As WebRequest
            Dim webresponse As WebResponse
    
            'dove prende il link
            webRequest = webRequest.Create(link.Text)
            webresponse = webRequest.GetResponse()
            inStream = New StreamReader(webresponse.GetResponseStream())
    
            'dove inserisce il codice html
            TextBox1.Text = inStream.ReadToEnd()
    
            If attivazione.Checked = True And TextBox1.Text.Contains("disponibile") = True Then
                System.Diagnostics.Process.Start(link.Text)
            End If
               End Sub
    End Class

    domenica 4 marzo 2012 16:08
  • Il problema con l'approccio che stai seguendo è che la scritta "disponibile" nella pagina viene inserita dopo il caricamento, tramite una chiamata asincrona attraverso AJAX. Di conseguenza, quando ottieni la pagina HTML tramite l'oggetto WebRequest, essa non avrà mai il valore corretto (perché viene valorizzato in seguito).

    Devi quindi usare un controllo WebBrowser e usare un Timer, come ti ho descritto in precedenza.

    Qual è il problema con la soluzione che ti ho suggerito?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 16:17
  • Non conosco nessuno dei due controlli. Il codice che mi hai mandato comunque è solo da fare taglia e incolla giusto?

    P.s. prima di questa sera mi ucciderai lo so

    domenica 4 marzo 2012 16:36
  • Sono due controlli molto semplici.

    WebBrowser permette di visualizzare pagine Web all'interno della tua applicazione:

    Come tutti gli altri controlli, lo trovi nella Toolbox di Visual Studio. Qui trovi la sua descrizione: http://msdn.microsoft.com/it-it/library/system.windows.forms.webbrowser.aspx.

    Nel tuo caso, lo devi usare per caricare la pagina che ti interessa. Ne hai bisogno perché, come detto, la parte che ti interessa viene valorizzata dopo il caricamento vero e proprio della pagina, quindi una semplice WebRequest non va bene (perché essa ti restituisce solo l'HTML "statico", mentre tu hai bisogno di un valore dinamico).

    Se poi non vuoi visualizzare la pagina Web nella tua applicazione, ti basta impostare la proprietà Visibile del controllo su False (ma almeno all'inizio, ti consiglio di mantenerlo visibile, così puoi renderti conto di come funziona).

    Quindi, nel tuo evento attivazione_Click, al posto del codice attuale, devi semplicemente inserire l'istruzione con cui carichi la pagina richiesta nel WebBrowser:

    Private Sub attivazione_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles attivazione.CheckedChanged
    
        WebBrowser1.Navigate(link.Text)
    
    End Sub

    Quando la pagina viene caricata, il WebBrowser genera l'evento DocumentCompleted. Al suo interno, devi avviare l'altro controllo di cui ti dicevo, ovvero il Timer, che serve per eseguire attività periodiche: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx.

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Timer1.Enabled = True
    End Sub

    Anche il controllo Timer lo trovi nella Toolbox. Dopo averlo aggiunto, comparirà in una barra in basso, sotto la tua form. Vai nella finestra delle proprietà ed imposta la sua proprietà Interval, che indica ogni quanti millisecondi deve scattare. Metti ad esempio 1000 (quindi un secondo).

    Infine, devi gestire l'evento Tick e controllare se nella pagina web è contenuta la parola disponibile:

    Private Sub Timer1_Tick(sender AS Object, e As EventArgs) Handles Timer1.Tick
    
        If attivazione.Checked = True Then
            ' Recupera il valore della pagina
            Dim value = WebBrowser1.Document.GetElementById("availabilityValue").InnerText
            If value.ToLower() = "disponibile" Then
                ' La valore è quello corretto. Apre il Browser.
                Timer1.Enabled = False
                System.Diagnostics.Process.Start(link.Text)
            End If
        End If
    End Sub

    Questo è tutto quello che ti serve. Prova ad inserire questi algoritmi nel tuo programma e guarda cosa succede. Ti consiglio anche di mettere qualche punto di interruzione e seguire l'esecuzione passo-passo, così puoi renderti conto del suo funzionamento.

    Tranquilla, io sono sempre felice di poter dare una mano :-)


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Modificato Marco MinervaMVP domenica 4 marzo 2012 16:59
    • Contrassegnato come risposta vale89 domenica 4 marzo 2012 19:48
    domenica 4 marzo 2012 16:59
  • Davvero non so come ringraziarti. Ora ho capito il funzionamenti di questi due nuovi controlli. Ho usato visual basic a livello scolastico però più che altro creavamo software che ci aiutavano con la ragioneria quindi per me tutto questo è un mondo nuovo.

    C'è ancora un piccolo problemino. Mi viene segnalato un errore qui:

                Dim value = WebBrowser1.Document.GetElementById("availabilityValue").InnerText

    Mi dice Riferimento a un oggetto non impostato su un'istanza di oggetto. Probabile che questo avviene perchè non ho effettuato il login? Eppure io sul sito sono sempre loggata.

    domenica 4 marzo 2012 17:28
  • C'è ancora un piccolo problemino. Mi viene segnalato un errore qui:

                Dim value = WebBrowser1.Document.GetElementById("availabilityValue").InnerText

    Mi dice Riferimento a un oggetto non impostato su un'istanza di oggetto. Probabile che questo avviene perchè non ho effettuato il login? Eppure io sul sito sono sempre loggata.

    Purtroppo non so come avviene l'accesso al sito, quindi non so se appena la pagina viene caricata, l'oggetto con ID availabilityValue effettivamente esiste.

    Prova a sostituire quella riga con queste:

    Dim value = String.Empty
    Dim availability = WebBrowser1.Document.GetElementById("availabilityValue")
    if availability IsNot Nothing Then value = availability.InnerText

    In modo da trattare anche il caso in cui l'oggetto non viene trovato.

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 17:36
  • Ciao Marco,

    potresti spiegarmi cosa si intende per "chiamata asincrona"?

    Grazie mille in anticipo 

    Ruggiero

    domenica 4 marzo 2012 18:20
  • potresti spiegarmi cosa si intende per "chiamata asincrona"?

    Una chiamata asincrona è l'esecuzione di un metodo che avviene in background, ovvero in un thread secondario, e che quindi non blocca l'interfaccia per il tempo dell'elaborazione: usando un metodo asincrono, l'applicazione continua ad essere responsiva (ovvero, banalmente, risponde all'input dell'utente) anche se, "dietro le quinte", sta eseguendo un'elaborazione che richiede diverso tempo per essere completata.

    Ti faccio un esempio. Supponi che tu voglia controllare se una certa pagina di un sito Internet è raggiungibile. Questa verifica richiede l'accesso ad Internet e il tentativo di download della pagina. Si tratta quindi di attività che richiedono del tempo: solitamente si tratta di pochi istanti, ma ci sono possono essere casi in cui è necessario di più (ad esempio se ci sono problemi di accesso alla rete).

    In questo scenario, se la verifica viene fatta nel thread principale dell'applicazione, e quindi in modo sincrono (che è il comportamento di default), la tua applicazione risulterà bloccata fino al termine del controllo (se ad esempio è un'applicazione Windows, non potrai fare clic sugli oggetti dell'interfaccia, e nemmeno chiuderla). Se, invece, effettui una chiamata asincrona (utilizzando un thread secondario), potrai continuare a lavorare con l'applicazione anche mentre la verifica è in corso.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 18:37
  • Ora l'errore non viene più segnalato ma non succede nulla. Se ad esempio metto www.google.it mi si apre la pagina nel webbrowser ma ovviamente non mi apre la pagina di google su firefox. Se metto il link del sito ovvero ad esempio

    https://secure.eu.blurum.net/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdArea=1&itemsPerPage=24&sector=8250&sector=8250&code=68974

    Non mi si apre neanche su webbrowser. Dice impossibile visualizzare la pagina

    domenica 4 marzo 2012 19:16
  • Ho provato ad inserire l'URL https://secure.eu.blurum.net/portaleincentive/solutions/blurum/main/catalog/ShowCatalog.jsp?cdArea=1&itemsPerPage=24&sector=8250&sector=8250&code=68974 nel browser, ma anch'esso mi dice "Impossibile visualizzare la pagina", segnalando l'errore 500, ovvero un errore interno del server.

    Sembra quindi che si sia un problema con il sito.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 19:30
  • *.* Ho risolto tutto. Ho inserito prima il link principale, tramite webbrowser ho fatto il login poi ho messo il link del prodotto ed è partito. Devo sempre partire per cui dalla schermata principale , fare login e poi posso inserire il link del prodotto. E' un pò ingegnoso però meglio di niente.
    domenica 4 marzo 2012 19:35
  • Ottimo.

    Putroppo a quanto pare il sito richiede che si inserisca prima il login, altrimenti il link diretto alla pagina causa l'errore 500.

    Ricordati di marcare la risposta :-)


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 19:40
  • Si purtroppo il sito prevede che per vedere di passare alla pagina principale poi da li passare al catalogo poi da li ho copi il link del prodotto o vai direttamente sul prodotto. Ora vedo di aggiungere dei botton per facilizzare tutti questi passaggi.

    Ti ringrazio ancora infinitamente.

    domenica 4 marzo 2012 19:47
  • Di niente, è sempre un piacere.

    Alla prossima.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    domenica 4 marzo 2012 19:53
  • Ciao Marco,

    sei stato molto chiaro nella spiegazione. Vorrei capire un'ultima cosa. Nell'esempio della pagina web presente in questa discussione non è necessario fare il refresh della webbrowser perchè la scritta da prelevare cal codice è gestita da una chiama asincrona o è comunque necessario fare un refresh per aggionare la pagina?

    Grazie in anticipo

    Ruggiero

    lunedì 5 marzo 2012 13:13
  • La prima che hai detto: non è necessario fare il refresh della pagina perché la chiamata asincrona è effettuata automaticamente dalla pagina web stessa, non appena viene caricata nel Web browser.

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    lunedì 5 marzo 2012 13:20
  • Grazie e a presto!!!

    Ruggiero

    lunedì 5 marzo 2012 13:32
  • Non c'è di che.

    A risentirci.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    lunedì 5 marzo 2012 13:36