|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
[C++]Gestire Firefox
Ciao a tutti, non mettetevi a ridere per la mia domanda per favore perchè mi servirebbe proprio...
![]() Ciò che vorrei fare io sarebbe poter gestire firefox con un programma in c++, in modalità nascosta o anche in modalità massimizzata... Le funzioni che servirebbero a me sarebbero tipo: -inserisci nello spazio di ricerca di google la stringa S -aspetta che la pagina si carichi -clicca il risultato n° 2 - quando si è caricato se il contenuto della pagina è uguale alla stringa X fai il refresh Cose di questo tipo... Mi rivolgo a voi perchè non so proprio dove cercare, mi basterebbe di funzioni poi cerco di arrangiarmi io grazie infinite in anticipo... ![]() ps. Andrebbero bene anche per internet explorer...o un qualsiasi browser per internet... Ultima modifica di borelg : 21-12-2008 alle 19:13. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Quello che vuoi fare se non ho capito male è HTML scraping. Non serve controllare un browser per farlo, basta che usi una libreria che fa il parsing della pagina html, eventualmente la ripulisce e poi ti mette a disposizione un albero DOM da cui accedere comodamente ai dati.
Per fare queste cose mi trovo bene con Python e la libreria BeautifulSoup, piu o meno viene cosi il codice (molto semplice): Codice:
stringaDaCercare = "xxx" numeroRisultato = 2 risultatiRicerca = BeautifulSoup("http://www.google.it/search?q=" + stringaDaCercare) nodo = risultatiRicerca.html.body.div[3].div.ol.li[ numeroRisultato ].h3.a link = nodo["href"].strip() target = BeautifulSoup(link) stringa = target.html.body.string.strip() if stringa==stringaDaCercare: doSomething() Una volta l'ho fatto anche in C++ usando TidyLib, è un po piu complesso pero. Ultima modifica di PhysX : 22-12-2008 alle 10:14. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
scusami tanto ma io phyton non saprei neanke da dove iniziare... non è che c' è un alternativa per il c++? grazie mille...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Per C++ non so se ci sono librerie già pronte che fanno la stessa cosa, io mi ero fatto un parser usando TidyLib, si usa cosi:
Codice PHP:
Codice PHP:
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
ok grazie infinite... ma scusa la mia ignoranza non ho ben capito quali sarebbero le funzioni da utilizzare con quel codice li... grazie infinite..
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Quote:
Codice PHP:
Codice PHP:
Invece getValue ritorna un attributo del nodo che ti serve. Ad esempio se voglio ottenere l'attributo HREF di un tag <a> basta fare cosi: Codice PHP:
|
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
si ma io non conosco il codice della pagina da cui voglio prendere i dati...
è un ![]() |
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Quote:
Quote:
per fare queste cose il codice ce l'hai a disposizione, basta che sul browser clicchi su visualizza codice html. per trovare facilmente il percorso di quello che ti interessa all'interno del codice HTML complesso puoi usare il plugin FireBug che ti permette di analizzare il codice html con strumenti avanzati. |
||
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
ahah... io non ne avevo idea che firefox avesse questa funzionalità.... fantastico... comunque ho provato il codice che hai postato su dev c++ e mi dice:
Codice:
main.cpp:1:18: tidy.h: No such file or directory main.cpp:2:20: buffio.h: No such file or directory main.cpp:5:19: wx/wx.h: No such file or directory main.cpp:6:23: wx/string.h: No such file or directory main.cpp:9: error: `TidyDoc' does not name a type main.cpp:12: error: expected `;' before '(' token main.cpp:13: error: variable or field `analizeToken' declared void main.cpp:13: error: expected `;' before '(' token main.cpp:14: error: `TidyNode' does not name a type main.cpp:19: error: `wxString' does not name a type main.cpp:20: error: `wxString' does not name a type main.cpp: In member function `bool Parser::open(const char*)': main.cpp:33: error: `TidyBuffer' undeclared (first use this function) main.cpp:33: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:33: error: expected `;' before "output" main.cpp:34: error: expected `;' before "errbuf" main.cpp:36: error: `Bool' undeclared (first use this function) main.cpp:36: error: expected `;' before "ok" main.cpp:39: error: `assert' undeclared (first use this function) main.cpp:41: error: `tdoc' undeclared (first use this function) main.cpp:41: error: `tidyCreate' undeclared (first use this function) main.cpp:42: error: `ok' undeclared (first use this function) main.cpp:42: error: `TidyXhtmlOut' undeclared (first use this function) main.cpp:42: error: `yes' undeclared (first use this function) main.cpp:42: error: `tidyOptSetBool' undeclared (first use this function) main.cpp:44: error: `errbuf' undeclared (first use this function) main.cpp:44: error: `tidySetErrorBuffer' undeclared (first use this function) main.cpp:46: error: `tidyParseString' undeclared (first use this function) main.cpp:48: error: `tidyCleanAndRepair' undeclared (first use this function) main.cpp:50: error: `tidyRunDiagnostics' undeclared (first use this function) main.cpp:52: error: `TidyForceOutput' undeclared (first use this function) main.cpp:54: error: `output' undeclared (first use this function) main.cpp:54: error: `tidySaveBuffer' undeclared (first use this function) main.cpp:60: error: `tidyBufFree' undeclared (first use this function) main.cpp: In destructor `Parser::~Parser()': main.cpp:68: error: `tdoc' undeclared (first use this function) main.cpp:68: error: `tidyRelease' undeclared (first use this function) main.cpp: At global scope: main.cpp:70: error: `TidyNode' does not name a type main.cpp:88: error: `wxString' does not name a type main.cpp:96: error: `wxString' does not name a type main.cpp:111: error: variable or field `analizeToken' declared void main.cpp:111: error: `int Parser::analizeToken' is not a static member of `class Parser' main.cpp:111: error: `wxString' was not declared in this scope main.cpp:111: error: `token' was not declared in this scope main.cpp:111: error: expected primary-expression before "int" main.cpp:111: error: initializer expression list treated as compound expression main.cpp:111: error: expected `,' or `;' before '{' token main.cpp:122: error: `bool Parser::walk' is not a static member of `class Parser' main.cpp:122: error: `TidyNode' was not declared in this scope main.cpp:122: error: `currentNode' was not declared in this scope main.cpp:122: error: expected primary-expression before "const" main.cpp:122: error: expected primary-expression before "int" main.cpp:122: error: initializer expression list treated as compound expression main.cpp:122: error: expected `,' or `;' before '{' token make.exe: *** [main.o] Error 1 Esecuzione terminata ps. In firefox dove sarebbe visualizza codice html?? |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Quote:
Per internet explorer invece c'è l'estensione HttpWatch simile a firebug. Per compilare quel codice devi prima scaricare i sorgenti di TidyLib, compilarli e linkarli al tuo progetto. Qua ci sono i link per il download e le istruzioni: http://tidy.sourceforge.net/libintro.html Se conosci il C++ queste cose dovresti saperle fare, comunque se usi Visual C++ Express al posto di DevC++ è meglio, puoi scaricarlo gratis da qua: http://www.microsoft.com/express/vc/ Al posto di wxString usa std::string. Alla funzione: Codice PHP:
per ottenere dal tuo programma in C++ il codice html di una pagina web puoi usare Curl. Scarichi i sorgenti da qua: http://curl.haxx.se/libcurl/ , li compili e li linki al to progetto. Poi usa questa funzione per ottenere il codice: Codice PHP:
Codice PHP:
Ultima modifica di PhysX : 23-12-2008 alle 13:14. |
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Apr 2008
Messaggi: 95
|
ok grazie infinite ho quasi capito tutto... però + di ogni altra cosa mi interessava una funzione in grado di far aspettare il programma finchè la nuova pagina web si fosse caricata... Non c' è qualche soluzione a questo?
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
Quote:
Codice PHP:
Quella funzione infatti scarica solo il codice HTML, se invece ti serve scaricare delle immagini o altri file devi prima ottenere il link cosi: Codice PHP:
Codice PHP:
Codice PHP:
Comunque tutto il codice che ti ho passato l'avevo scritto facendo un collage di pezzi di codice presi da tutorial vari e sistemandolo alla buona. Se vuoi usarlo davvero dovresti dargli una sistemata, soprattutto alla gestione dei puntatori. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:40.