- 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
e l'errore,
nonchè i link del sito del liceo (spero si possa)
Qualcuno tra vuoi illuminati mi aiuterebbe? :look::utonto:
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
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: