[JAVA] problema automazione web con Selenium e HTMLUnit

giosch

Utente Attivo
145
3
CPU
Intel I7-2600K
Scheda Madre
MSI P67A GD55
HDD
WD Cavia black 500 GB + WD Caviar Green 2 TB
RAM
4x2 GB Kingston HyperX
GPU
MSI GTX 560 Ti Hawk
Audio
Integrata COn Surround 7.1
Monitor
22 pollici Samsung Syncmaster SA350
PSU
850 W OCZ 80 Gold
Case
Cooler Master 690 II Pure Black Edition
OS
Windows 7 a 64 bit
Salve a tutti e grazie della pazienza che avrete nel leggere questo post :)

Allora, il mio liceo usa una piattaforma web chiamata "ScuolaNext".
La mia intenzione era, vista la pessima interfaccia utente di questa piattaforma, di crearne una alternativa, però sotto forma di programma java, visto che è quello che so fare.

Cercando un modo per interfacciarmi con un sito sprovvisto di API apposite ho trovato Selenium (e successivamente HTMLUnit, che è però contenuta anche da se in selenium).

Ora, per accedere alla pagina di login bisogna visitare il sito del mio liceo cliccare sul link, in quanto scuolanext offre il proprio servizio a molte scuole e quindi ognuna ha il proprio link.
Il fatto è che il link da solo non basta, ma (per quel poco che ne capisco) il link attiva una funzione javascript che fornisce il codice. (Verificato come? Cliccando si accede, copiando il link e incollandolo no...)

Siccome io non voglio aprire le pagine mentre il programma le scorre, di selenium potrei usare solo HtmlUnitDriver, derivato dall'indipendente HtmlUnit, e non altri driver come quelli di firefox e chorme che ne aprirebbero la finestra.

Con HtmlUnit (e quindi anche con selenium/HtmlUnitDriver) se provo ad aprire la pagina e cliccare sul lin con i javascript disattivati" il programma non restituisce errori, ma accede alla pagina generica di errore di ScuolaNext, che afferma che il link di accesso non era valido, e quindi suggerisce di usare quello fornito dalla scuola.

Se provo ad attivare i javascript di HtmlUnit, appena faccio il get della pagina del sito del liceo mi viene ritornato errore dovuto ad alcune librerie/funzioni javascript usate...

Vi posto il codice usato
Codice:
package provahtmlunit;

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;
import java.io.IOException;
import java.net.MalformedURLException;


public class ProvaHTMLunit {


    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        WebClient webClient = new WebClient();
        webClient.getOptions().setJavaScriptEnabled(true);
        //sito del liceo
        HtmlPage page1 = webClient.getPage("http://www.liceodavinci.tv/sitoLiceo/");
        //prendo l'elemento corrispondente al link di scuolanext, tramite l'XPath
        HtmlElement elemento=page1.getFirstByXPath("//*[@id=\"rt-showcase\"]/div/div[6]/div/div/p/a[1]");
        //clicco
        HtmlPage click = elemento.click();
        //ritorno in output il codice html della pagina aperta dal link
        System.out.println(click.getBody());


        webClient.closeAllWindows();
    }
}

e l'errore,
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructorWARNING: Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.] sourceName=[http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js] line=[109] lineSource=[null] lineOffset=[0]
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument execCommand
WARNING: Nothing done for execCommand(BackgroundImageCache, ...) (feature not implemented)
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[Object doesn't support this action] sourceName=[http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js] line=[302] lineSource=[null] lineOffset=[0]
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[innerHTML is read-only for tag 'table'] sourceName=[http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js] line=[336] lineSource=[null] lineOffset=[0]
mar 25, 2014 2:45:37 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[innerHTML is read-only for tag 'tr'] sourceName=[http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js] line=[337] lineSource=[null] lineOffset=[0]
Exception in thread "main" ======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.EvaluatorException]
com.gargoylesoftware.htmlunit.ScriptException: innerHTML is read-only for tag 'tr' (http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js#337)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:689)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:575)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1074)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:391)
at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:266)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:286)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:702)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:662)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:926)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:245)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:191)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:455)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:329)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:394)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:379)
at provahtmlunit.ProvaHTMLunit.main(ProvaHTMLunit.java:25)
Caused by: net.sourceforge.htmlunit.corejs.javascript.EvaluatorException: innerHTML is read-only for tag 'tr' (http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js#337)
at com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter.runtimeError(StrictErrorReporter.java:81)
at net.sourceforge.htmlunit.corejs.javascript.Context.reportRuntimeError(Context.java:1047)
at net.sourceforge.htmlunit.corejs.javascript.Context.reportRuntimeError(Context.java:1094)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLTableRowElement.setInnerHTML(HTMLTableRowElement.java:213)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:120)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$GetterSlot.setValue(ScriptableObject.java:295)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$RelinkedSlot.setValue(ScriptableObject.java:368)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putImpl(ScriptableObject.java:2796)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.put(ScriptableObject.java:521)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2479)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1574)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1569)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1253)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:411)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3057)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:566)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:674)
... 30 more
Enclosed exception:
net.sourceforge.htmlunit.corejs.javascript.EvaluatorException: innerHTML is read-only for tag 'tr' (http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js#337)
at com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter.runtimeError(StrictErrorReporter.java:81)
at net.sourceforge.htmlunit.corejs.javascript.Context.reportRuntimeError(Context.java:1047)
at net.sourceforge.htmlunit.corejs.javascript.Context.reportRuntimeError(Context.java:1094)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLTableRowElement.setInnerHTML(HTMLTableRowElement.java:213)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:120)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$GetterSlot.setValue(ScriptableObject.java:295)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$RelinkedSlot.setValue(ScriptableObject.java:368)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putImpl(ScriptableObject.java:2796)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.put(ScriptableObject.java:521)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2479)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1574)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1569)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1253)
at script(http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js:337)
at script(http://www.liceodavinci.tv/sitoLiceo/media/system/js/mootools-core.js:276)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:411)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3057)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:566)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:674)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:575)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1074)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:391)
at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:266)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:286)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:702)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:662)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:926)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:245)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:191)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:455)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:329)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:394)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:379)
at provahtmlunit.ProvaHTMLunit.main(ProvaHTMLunit.java:25)
======= EXCEPTION END ========
Java Result: 1

nonchè i link del sito del liceo (spero si possa)
L.S.S. Leonardo da Vinci - Treviso - Liceo Scientifico Leonardo da Vinci-Treviso
Il link a scuolanext è in alto a destra, il primo di quella serie di tre immagini/link

Qualcuno tra vuoi illuminati mi aiuterebbe? :look::utonto:
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!