Le problème là, c'est que les URLs sont générées dynamiquement, donc les extraire ne te ménera à rien. Que veux-tu faire au final?
Version imprimable
Le problème là, c'est que les URLs sont générées dynamiquement, donc les extraire ne te ménera à rien. Que veux-tu faire au final?
salut,
merci pour la reponse ,
j'ai fait l'extraction des fichiers js d'une page charger avec QtWebKit mais ces fichiers js peuvent contenir d'autres fichiers js (c'est a dire appel d'un fichier js dans un fichier js) par exemple :
le fichier 0100.js appelle Fix.js :
l'extraction des fichiers js d'une page web est faite, mais j'arrive pas à récupérer les fichiers js contenu dans d'autre js c'est pour cette raison que je veux parcourir les fichiers js ,Code:
1
2 document.write ('<script language="javascript" type="text/javascript" src="http://pubmedia.tf1.fr/tf1/Fix.js"></script>');
merci pour tout aide,
Dans le cas que tu cites (et uniquement celui-ci), tu peux te contenter d'une expression de ce type:
Il va de soi que:Code:<script .* src="(.*?)"
1. ca ne fonctionne que pour script
2. ca ne fonctionne que pour les urls non composées dynamiquement
3. ca ne fonctionne que si l'attribut src est le dernier.
Si tu veux quelque chose de plus robuste, il te faudra:
1. récupérer le contenu de document.write
2. décomposer le noeud (sa clé plus une collection d'éléments attribut=valeur
3. récupérer l'attribut src
En bref, vaut mieux charger ce snippet dans un lecteur XML pour récupérer la valeur de ton attribut
merci pour la reponse ,
j'ai fait la recuperation de contenu de document.write puis j'ai recuperer l'attribut src de la balise <script> , mais comme j'ai plusieur fichier .js je doit les verifier tous et cette verification je l'ai fait dans le slot "slotReadyRead"
mon probleme c'est si je fixe le lien de fichier .js comme ce ci "lien_js[0];" j'aurai le resultat mais si je fait le parcoure de tout le tableau ca marche plus ? vous pouvez m'aider je voie pas le probleme ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void Webkit::Charger_fichier() { lien_js =dataScript->getLink(); //int j; //for (j=0;j<lien_js.size();j++){ qDebug()<< "liens js: " << lien_js[0]; QUrl urll(lien_js[0]); QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReadyRead(QNetworkReply*))); QNetworkRequest request; request.setUrl(urll); manager->get(request); app->processEvents(); // } }
voila le code de slot "slotReadyRead" dans ce slot j'ai recuperer le contenue de fichier .js dans "chaine" de type QByteArray puis je parcoure chaine si il rencontre le mot "document.write" je recupere leur contenue dans un string puis je cherche l'attribut qui contient "http://" :
est ce que mon idée est bonne ?,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 void Webkit::slotReadyRead(QNetworkReply* reply) { QString affichage; QByteArray chaine =reply->readAll(); for (int j = 0; j < chaine.size()-13; ++j) { if ((chaine[j]=='d')&&(chaine[j+1]=='o')&&(chaine[j+2]=='c')&&(chaine[j+3]=='u')&& (chaine[j+4]=='m')&&(chaine[j+5]=='e')&&(chaine[j+6]=='n')&&(chaine[j+7]=='t')&& (chaine[j+8]=='.')&&(chaine[j+9]=='w')&&(chaine[j+10]=='r')&&(chaine[j+11]=='i')&& (chaine[j+12]=='t')&&(chaine[j+13]=='e')) { int k; k=j+14; while (chaine[k]!='<') { k++; } while (chaine[k]!='>') { docwrite.push_back(chaine[k]); k++; } docwrite.push_back(chaine[k]); qDebug() << "peut etre quel existe un autre fichier .js :"; qDebug()<<docwrite ; QString str =docwrite; docwrite.clear (); doc.setContent(str); QDomNodeList node_liste = doc . elementsByTagName ("script"); QString valAttr; for(int i=0;i<node_liste . length();i++) { QDomNode node = node_liste . item (i); QDomElement elt = node . toElement (); QDomAttr attr = elt . attributeNode ( "src"); valAttr = attr . value (); if (valAttr . contains("http://", Qt::CaseInsensitive)) { qDebug()<< "le nouveau scripttttttttttttttttttttttttttttttttttt: "<<attr . value(); affichage = affichage + " "+attr . value(); qDebug() << "le fichier .js existant :"<< affichage ; } } } }//fin boucle for }
merci pour tout aide ,