20130723
20130802-1822 15 upload dl.free.fr 064321... éponyme, estimé 10h.
AJOUTER:
si le matériel lle permet (souris filaire usb) envisager de débrancher la souris sinon la poser sur le dos!
demande de ne plus afficher script sans reponse sur pageà voir (ne sait si c'est mémorisé= voir: dom.max_script_run_time à 1800 sur DellVostro1720XP, à vérifier sur Acerm1641VistaOrigine)
pour arrêter la machine sans risque: laisser un fichier "souricière.txt" ouvert sur le buereau et quand nécessaire y amener la souris (les frappes générées seront à peu près inoffensives) et attendre le message d'erreur de l'automate
un nouvel exemple pour un site complexe qui résiste à
wget
http://web.nli.org.il/sites/NLI/English/collections/Islam-Middle-Eastern/Pages/30-Quran-books.aspx
GAFFE: la méthode utilisée frappe à travers les fenêtres, ça ouvre un infinité de risques en cas de dérèglement, donc:
- jouer sur une machine la plus simple possible
- ne laissez pas trainer de grenades sur le bureau!
- pas de droit d'administration
- pas de fenêtre ouverte et le moins possible d'icônes sur le bureau:
l'idéal: une machine (enfin une session) "nue"
(Une alternative serait de garder la fenêtre contenant l'image en plein écran, avec le risque qu'elle ne reçoive un ordre de changement de situation!)
particularités du site:
- le bouton "page suivante" est atteint par 13 tabulations depuis le haut de la page (alt+D)
- l'image est inaccessible au clavier, nécessite un clic-droit-->sauver sous
envoi du clic
le clic droit est envoyé comme "petit 2" redirigé grâce par un script
AutoHotkey:
²::
mouseclick, right
sleep 1000
return
Préparation:
Utilisation:
- UNE FOIS par session Windows exécuter "clicdroit.exe"
- ouvrir la première page à sauvegarder dans firefox
- la dimensionner à un demi écran en partie gauche
- créer/modifier chantier.txt, il comporte quatre lignes
- le nom du dossier de sauvegarde, composé de:
- le "rang" dans la bibliothèqye tel qu'il apparait quand on chatouille "full text": 01, 02a, ... 30
- le libellé du coran (éventuellement tronqué à non-ambigu)
- (le nombre de pages sera ajouté automatiquement)
- le délai donné pour attendre la fin du chargement d'une page en secondes (15 pour petite page, 120 c'est plus sûr, peut-être 60 en heures creuses)
- le numéro de la première page à charger
- le nombre de pages
- ouvrir "auto.vbs" par le moyen qui va bien (menu démarrer-->exécuter, clic-droit-->ouvrir voire double-clic)
- attendre le message de dépar
- éventuellement ajuster les fenêtres
- activer la fenêtre de départ par un SIMPLE clic-gauche sur son titre
- placer la souris sur l'image de la page à capturer
- frapper "enter" pour accepter le panneau de départ (LAISSER LA SOURIS SUR L'IMAGE)
Goodies:
Le fichier "chantier.txt" est maintenu à jour au fur et à mesure de la progression, il n'est donc pas difficile de relancer l'opération après une défaillance
le programme est blindé contre deux pages successives identiques
le programme est blindé contre un "trou", en cas de besoin d'un démarrage en cours, ajouter un "fantôme" remplaçant la page précédente
la progression apparait à travers un fichier .info dans le dossier cible (à trier et afficher le plus jeune en tête!)
affiche le nombre de seconde avant tentative de sauvegarde par pas de 10"
GAFFE: si la page à sauver existe déjà, elle est remplacée silencieusement
"Auto.vbs"
prems=true
lastone=""
delaicaractere=400
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
prev=""
'msgbox Wscript.ScriptFullName
curdir= Left(Wscript.ScriptFullName, InStrRev(Wscript.ScriptFullName, "\"))
chantier=curdir & "\chantier.txt"
If not oFSO.FileExists(chantier) Then
msgbox "pas de fichier " & chantier
wscript.quit
End If
dim fi
set fi=oFso.opentextfile(chantier)
coran=trim(fi.readline)
attente=trim(fi.readline)
lesuivant=trim(fi.readline)
nbpa=trim(fi.readline)
fi.close
If not oFSO.FolderExists(coran & "-" & nbpa ) Then
oFso.createfolder (coran & "-" & nbpa )
End If
nbc=len(nbpa)
nbc=len(nbpa)
info "démarrage"
wscript.sleep 1000
wshshell.appactivate "mets"
rep=msgbox ("vous pouvez ajuster le dossier " & coran & vbcrlf & _
"(affichr mode document, et l'ouvrir ) " & vbcrlf & _
"(le positionner en bas d'écran, large, plus jeunes en haut) " & vbcrlf & _
"Placez le curseur sur l'image de la page " & lesuivant & vbcrlf & coran & vbcrlf & " (SANS Y FAIRE DE CLIC) " & vbcrlf & _
"frapper <entrée> au clavier",1,"Automate d'aspiration d'images via Firefox")
if rep<>1 then
effacer 1' info ""
wscript.quit
end if
while int(lesuivant) <= int(nbpa)
if ofso.fileexists(curdir & "pause.txt") then
msgbox "efacez le fiviheir pause.txt et frrappez entrer"
end if
nomfi=curdir & coran & "-" & nbpa & "\" &right("00000" & lesuivant,nbc) &".jpg"
nomsent=nomfi
if not prems then nomsent= right("00000" & lesuivant,nbc) &".jpg"
prems=false
if oFso.fileexists(nomfi) then
ofso.deletefile( nomfi)
end if
if lesuivant>1 then lastone=curdir & coran & "-" & nbpa & "\" &right("00000" & lesuivant-1,nbc) & ".jpg"
if len(lastone)>1 and not oFso.fileexists(lastone) then
msgbox "GAFFE le précedent n'y est pas " & vbcrlf & lastone & "prochain " & vbcrlf & nomfi
info ""
wscript.quit
end if
wscript.sleep 1000
info "envoyer sauvegarde pour " & nomfi
envoyer "²", 1000
envoyer "S",2000
texte nomsent
wscript.sleep 5000
irep=0
while (irep<10) and not oFso.fileexists(nomfi)
irep=irep+1
info "envoyer relance n " & irep & " sauvegarde pour " & nomfi'
texte vbcr
wscript.sleep 5000
wend
trouve=true
if not oFso.fileexists(nomfi) then
'info "pas retrouve: " & nomfi
msgbox "PAS RETROUVE apres 5 secondes " & vbcrlf & nomfi
wscript.quit
trouve=false
' effacer 2' info ""
' wscript.quit
end if
if trouve then
' vérifier lastone <> nomfi
if len(lastone)>0 then
info "comparer precedent et " & nomfi
id=true
set f1=oFso.opentextfile(nomfi)
set f2=oFso.opentextfile(lastone)
while id and (not f1.atendofstream ) and (not f2.atendofstream)
c1=f1.read(1)
c2=f2.read(1)
if c1<>c2 then id=false
wend
if id and f1.atendofstream and f2.atendofstream then
msgbox "deux dernier identiques " & vbcrlf & lastone & vbcrlf & nomfi
wscript.quit
f1.close
f2.close
oFso.deletefile (nomfi)
trouve=false
end if
f1.close
f2.close
end if
end if ' trouve
if trouve then
lastone=nomfi
lesuivant=lesuivant+1
if int(lesuivant) <= int(nbpa) then
' mettre à jour le chantier
ofso.deletefile(chantier)
set fi=oFso.createtextfile(chantier)
fi.writeline coran
fi.writeline attente
fi.writeline lesuivant
fi.writeline nbpa
fi.close
info "passer page suivante, doit etre " & lesuivant
envoyer "%d" ,100 'haut de page
for t=1 to 13
envoyer "{tab}",100
next 't
wscript.sleep 1000
envoyer "{enter}",1000
info "page " & lesuivant & " demandée attendre " & attente & " secondes"
else
info "essai de relance de la sauvegarde dans " & attente & " secondes"
end if ' trouve
nbsectot=attente
while nbsectot >0
info "page " & lesuivant & " demandée attendre " & attente & " secondes reste: " & nbsectot
nbsectot=nbsectot-10
wscript.sleep 10000
wend
end if
wend 'lesuivant<=page
msgbox "termine car " & (lesuivant) & ">" & (nbpa)
effacer "3 au bout " & lesuivant & ">" & nbpa ' info ""
sub texte (t )
nt=""
for i=1 to len(t)
q=mid(t,i,1)
'if instr("/\: =",q)>0 then q="_"
if q=vbcr then q="%E"
nt=nt & q
next
' msgbox nt
wshshell.sendkeys nt
end sub
sub envoyer (quoi,delai)
q=quoi
if q=vbcr then q="{enter}"
wshshell.sendkeys q
wscript.sleep delai
end sub
sub info (quoi)
if len(prev)>0 then
if oFso.fileexists(prev) then
oFso.deletefile(prev)
end if
end if
if len(quoi) >0 then
stamp=now & "_" & quoi & ".info"
tampon=""
for i=1 to len(stamp)
c=mid(stamp,i,1)
if instr("/\: =",c)>0 then c="_"
tampon=tampon & c
next
prev=curdir & coran & "-" & nbpa & "\Info_" & tampon
' msgbox prev
ofso.createtextfile (prev)
wscript.sleep 1000
' msgbox "created"
end if
end sub
sub effacer (n)
'msgbox "effacer " & n
info ""
end sub