20130624
sur sollicitation de MDP13
Page spécialisée pour capturer un site résistant à
wget car il utilise du javascript (mais ce pourrait être n'importe quoi d'autre) pour tourner les pages
pour le fun, le film d'une capture (selon
FilmerWindows) :
http://antiguide.free.fr/divers/wgetjavascript/DSCN7468.AVI (10 Mo)
faire un peu mieux
- l'icône ab.vbs est limite cachée sous le navigateur
- à la fin, faudrait montrer la colonne résultats
mode d'emploi:
merci, mais...
le plus dur reste à faire: t'apprendre à utiliser l'automate
hier c'était en deux étapes, actuellement le code de filtrage du deuxième programme est imbriqué et exécuté page à page pour produire directement le fichier "totale". !
1) créez quelque part le dossier "cible", ce pourrait être dans le coin en bas à droite de l'écran
2) procurez vous le programme "ab.vbs" et placez le sur le bureau (1), par l'une des deux méthodes:
3) ouvrir avec Firefox (pas testé les autres) la page des résultats: on arrive sur la page 1
- LA SAUVER SOUS AU FORMAT TXT avec un nom quelconque et n'importe où (ce format sera mémorisé pour les pages suivantes).
- si on souhaite démarrer la capture sur une ligne différente de la première, 1 se positionner manuellement sur la page la contenant.
- LAISSER FIREFOX OUVERT
4) organiser le bureau:
- fermer toutes les autres fenêtres ouvertes; ça limitera les risques de pomper en dehors du bac-à-sable.
- la fenêtre fFrefox occupe la partie gauche
- l'icône de 'ab.vbs' est visible en haut à droite
- l'icône du dossier cible est également visible (3)
- GAFFE: le dossier cible ne doit pas déjà contenir les fichiers qui vont être créés.
5) draguez l'icône du dossier cible sur l'icône de "ab.vbs" (2)
6) position le "Ok" du dialogue de définition de l'intervalle au dessus de la première ligne de la page web
7) wait & see, il y en a pour une demi-heure !
bon dimanche.
PO.
NOTE: peut aussi se jouer en "plein écran"
(1): - éventuellement ajuster les délais... par
(2): alternativement,
- peut être lancé par une ligne de commande: start .....\ab.vbs ....\dossier_capture (avec les deux chemins en absolu)
(3) le dossier de capture peut être ouvert (comme sur la video ci dessus) par ailleurs pour voir les pages arriver sur le disque, mais c'est toujours l'icône du dossier qu'il faudra utiliser.
programme ab.vbs:
' automate capture iran par firefox selon: http://antiguide.free.fr/wiki/wakka.php?wiki=WgetPagesJavascript
' http://result-p.moi.ir/Portal/Home/default.aspx
' définition du dossier cible (doit exister au lancement, et plutôt vide)
cible="%userprofile%\Desktop\2013-a\"
Set WshShell =CreateObject("WScript.Shell")
Set oArgs=WScript.Arguments ' tableau d'arguments
nbargs= oArgs.Count ' nombre d'argument transmis
if nbargs=1 then
cible=oArgs(0) & "\"
elseif nbargs=0 then
msgbox "Pour exécuter ce programme, vous devez lui fournir le dossier cible" & vbcrlf & _
"par exemple en 'draguant' l'icone de ce dossier sur son icône"
wscript.quit
else
msgbox "Erreur fatyale: reçu plus d'un argument " & vbcrlf & _
"Pour exécuter ce programme, vous devez lui fournir le dossier cible" & vbcrlf & _
"par exemple en 'draguant' l'icone de ce dossier sur son icône"
wscript.quit
end if
set fs=createobject("scripting.filesystemobject")
' paramètres "fixes"
nblipa=50
nbco=7
repetsave=20
' délais
delayc=50 ' entre caractères
delaytab=100
delaynext=100
delayload=5000 ' chargement de la page
delerepe=1000
delaytop=5000 ' temps pour se repositionner en haut de pge après dialogue
' andiamo!
debli=inputbox ("Hello," & vbcrlf & "déplacez cette fenêtre pour positionner le bouton 'OK' sur le titre de la page web" & vbcrlf & "puis entrez les limites des lignes à capturer sous la forme: depart-stop/dernier " & vbcrlf & _
"(debut doit être la page actuelle) " & vbcrlf & _
"Enfin faites un clic gauche sur le bouton 'Ok' et aussitôt un clic gauche sur le titre de la page. ", _
"Définir les lignes à capturer" ) '125
'
if debli="" then
wscript.quit
end if
derder=""
sep=instr(debli,"/")
if sep>0 then
derder=mid(debli,sep+1)
debli=mid(debli,1,sep-1)
end if
sep=instr(debli,"-")
if sep=0 then
msgbox "fallait debut-fin !"
wscript.quit
end if
derli=mid(debli,sep+1)
if derder="" then derder=derli
debli=mid(debli,1,sep-1)
deb=int((debli+nblipa-1)/nblipa)
fin=int((derli+nblipa-1)/nblipa)
derpage=int((derder+nblipa-1)/nblipa)
lonpa=len(fin)
wscript.sleep(delaytop)
on error resume next
totale=cible & deb & "-" & debli & "--" & fin & "-" & derli & ".txt"
if fs.fileexists (totale) then
while fs.fileexists (totale)
rep=msgbox ("le fichier à créer:" & vbcrlf & totale & vbcrlf & "existe déja; effacez le!" & vbrlf & "Puis clic sur OK suivi de clic en haut à droite de la page" ,1)
if rep=2 then wscript.quit
wend
wscript.sleep(delaytop)
end if
on error resume next
set fo=fs.createtextfile(totale)
if err.number <>0 then
msgbox "erreur fatale creation " & vbcrlf & totale
wscript.quit
end if
on error goto 0
logname=cible & deb & "-" & debli & "--" & fin & "-" & derli & ".log"
if fs.fileexists (logname) then
while fs.fileexists (logname)
rep=msgbox ("déplacez cette fenêtre pour positionner le bouton 'OK' sur le titre de la page web" & vbcrlf & _
"le fichier à créer:" & vbcrlf & totale & vbcrlf & "existe déja; effacez le!" & vbrlf & "Puis clic sur OK suivi de clic en haut à droite de la page" ,1)
if rep=2 then wscript.quit
wend
wscript.sleep(delaytop)
end if
set fl=fs.createtextfile(logname)
agarder=false
for page=deb to fin
nom=cible & right("000" & page, lonpa) & "-" & (page*nblipa-nblipa+1) & ".txt"
wscript.sleep(1000)
' sauvegarde txt
if fs.fileexists (nom ) then
while fs.fileexists (nom )
rep=msgbox ("déplacez cette fenêtre pour positionner le bouton 'OK' sur le titre de la page web" & vbcrlf & _
"le fichier à créer:" & vbcrlf & nom & vbcrlf & "existe déja; effacez le!" & vbrlf & "Puis clic sur OK suivi de clic en haut de la page" ,1)
if rep=2 then wscript.qui
wend
wscript.sleep(delaytop)
end if
fl.writeline now & " sauvegarde " & nom
wshshell.sendkeys "%F"
wscript.sleep(1000)
wshshell.sendkeys "E"
wscript.sleep(1000)
' fichier
wshshell.sendkeys "%N"
wscript.sleep(1000)
une nom
' envoyer la demande de sauvegarde
wshshell.sendkeys "%E"
wscript.sleep(1000)
todo=repetsave
reussi=fs.fileexists (nom )
' (et insister!)
while (not reussi) and (todo>0)
todo=todo-1
fl.writeline now & " repetition " & repetsave-todo
wshshell.sendkeys "%E"
wscript.sleep(delerepe)
reussi=fs.fileexists (nom )
wend
if not fs.fileexists (nom ) then
while not fs.fileexists (nom )
rep=msgbox ("déplacez cette fenêtre pour positionner le bouton 'OK' sur le titre de la page web" & vbcrlf & _
"le fichier: " & nom & vbcrlf & "n'a pas été créé; effectuez la sauvegarde manuellement!" & vbcrlf & _
"Puis clic sur OK suivi de clic en haut dela page" ,1)
if rep=2 then wscript.quit
wend
wscript.sleep(delaytop)
end if
set fi=fs.opentextfile(nom)
li=0
li50=0
ignorer=true
while ignorer and not fi.atendofstream
lu=fi.readline
' fl.writeline "avance " & lu
li=li+1
if li=12 then
if mid(lu,1,len(derder))<>derder then
rep=msgbox ("erreur fatale: " & vbcrlf & _
"Nombre de lignes du tableau lu en tete: ===" & mid(lu,1,len(derder)) & "<>espéré:" & derder& "===")
wscript.quit
else
ignorer=false
end if
end if
wend
if fi.atendofstream then
msgbox "erreur fatale pas trouvé la ligne en-tete " & derder
wscript.quit
end if
lu=fi.readline
for lu50=1 to nblipa
prochaine=""
for col=1 to nbco
if fi.atendofstream then
msgbox "erreur fatle fichier de moins de " & nblipa & " entrées."
wscript.quit
end if
lu=fi.readline
dump=""
for id=1 to len(lu)
dump=dump & " " & asc(mid(lu,id,1))
next 'id
'fl.writeline lu50 & " " & col & " =!!!==" & lu & "=!!!==" & dump & "==!!!=="
if col=1 then
sep9=instr(lu,chr(9))
if sep9=0 then
msgbox "erreur fatale pas tab"
else
nuact=mid(lu,1,sep9-1)
end if
end if
if 0+nuact>=0+debli then
agarder=true
' fl.writeline now & " lu50=" & lu50 & " nuact=" & nuact & " debli=" & debli & " a garder"
end if
li=li+1
' msgbox "lu ligne utile lu50=" & lu50 & " col=" & col & vbcrlf & lu
dump=""
for xx=1 to len(lu)
x1=mid(lu,xx,1)
dump=dump & " " & xx & ":" & asc(x1)
next ' xx
' msgbox "un score:" & len(li) & vbcrlf & li & " " & lu & vbcrlf & dump
if col=1 then
finnu=instr(lu,chr(9))
if finnu=0 then
msgbox lu & vbcrlf & "pas de numero en tete de ligne ====" & derli & "====" & numlia & "=====" & vbcrlf & lu
wscript.quit
end if
numlia=mid(lu,1,finnu-1)
' numli=numlia+0
expl=""
if page=deb then expl="RAPPEL: firefox doit être positionné sur la page de la première ligne à capturer"
theorique=(page-1)*50+lu50 & " "
theorique=mid(theorique,1,len(theorique)-1)
' msgbox "numlia=" & numlia & "= numli=" & numli &"===" & "théroique=" & theorique & " finnu=" & finnu
if numlia <> theorique then
msgbox "lu50=" & lu50 & vbcrlf & _
"erreur fatale, sur la page: " & vbcrlf & nom & vbcrlf & "ligne du tableau: " & lu50 & vbcrlf & _
"numli trouvé ===" & numlia & "===<>espéré:===" & theorique & "===" & vbcrlf & lu & vbcrlf & expl
wscript.quit
end if
end if ' col=1
if agarder then prochaine=prochaine & lu ' fo.write lu
if col<nbco then
if agarder then prochaine=prochaine & chr(9)
else
if agarder then fo.writeline prochaine
if nuact=derli then
fo.close
fl.writeline now & " termine à " & nuact
fl.close
msgbox "fini à ligne: " & nuact
wscript.quit
end if
end if
next 'co
next 'lu50
fi.close
if page=fin then
msgbox "ouf"
wscript.quit
end if
' calcul du nombre de tabilations pour atteinde ">"
if page>=1 then tab=16
if page>=2 then tab=18
if page>=11 then tab=19
'msgbox "derpage=" & derpage
if page>=1+10*int(derpage/10) then
tab=8+derpage-10*int(derpage/10)
' msgbox "tab=" & tab
end if
for x=1 to tab
wscript.sleep(delaytab)
wshshell.sendkeys "{tab}"
next
' pause pour voir le ">"
wscript.sleep(delaynext)
wshshell.sendkeys "{enter}"
' attente plus que nécessaire pour le chgt de page
wscript.sleep(delayload)
next
sub une (liste)
for i=1 to len(liste)
un=mid(liste,i,1)
wscript.sleep delayc
wshshell.sendkeys un
next
end sub