Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
nombre réponses : 25

#0 -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 27/01/2015, à 11:19

dva2tlse
Réponses : 25

Bonjour le forum; j'ai déjà posé ici des questions relatives au développement que j'ai à faire. C'est un gros programme en fortran, enfin gros pour moi en tous cas, qui ne suis pas du tout développeur mais ingénieur mécanicien, et le problème qui se pose à moi est que lors de la lecture d'un des fichiers d'entrée, il se produit l'erreur suivante :

	At line 2189 of file /S/DATA/DVA/F90/BN/p2srfd.f
	Fortran runtime error: Bad value during integer read

C'est une banale lecture dans une variable indicée comme il y en a des dizaines d'autres :

	read(MDana(Tana), '(I1, I1)') Mana, Dana

    Pour ceux qui ne parlent pas le fortran, ça vaut dire qu'on lit dans la variable MDana(Tana); c'est une chaine de deux caractères, et chacun est interprété comme un entier, pour remplir les variables entières Mana et Dana.

En essayant avec un autre fichier d'entrée, qui est lu et dont les deux millions de lignes sont mis en mémoire dès le début du programme, il se produit la même erreur au même endroit et je ne la vois qu'en redirigeant la sortie vers un fichier temporaire que j'examine, sinon l'écran devient illisible, pire que les dernières lignes que j'ai sélectionnées ici, et je suis obligé de réinitialiser le  terminal pour pouvoir recommencer à travailler. Ceci me fait supposer qu'une espèce de caractère fantôme ne veut pas se laisser lire, et serait un séquence escape-bidule que je connais mal, ou l'envoie au terminal quand j'essaye de l'afficher pour voir ce qui se passe.
(il y a cinq fichiers d'entrée, un seul de sortie, et quelques autres temporaires ou d'entrées facultatives selon les options choisies)
   

      file1='PY/premier-526PYL-MR3.ana' -> Ok au début, puis...
fabmat:00 Les perturbations sont :  41 00 00 00 00, ltmp=     2202  22024100000000   0.00  0.00                                          
fabmat:00 Pert's :  41 00 00 00 00, ltmp=     2202  22024100000000   0.00  0.00, lana+imat= 1966 +    81 =  2047
fabmat:00 Les perturbations sont :  4
fabmat:00 Les perturbations sont :  4 ®
fabmat:00 Les perturbations sont :  4 ® $Î
fabmat:00 Les perturbations sont :  4 ® $Î «
fabmat:00 Les perturbations sont :  4 ® $Î « ?K
fabmat:00 Les perturbations sont :  4 ® $Î « ?K, ltmp=     2202  22024®$Ϋ?Kõ®ì\u0152?•0$=r¡¿ , lana+imat= 1966 +    82 =  2048
      file1='PY/deuxième-111PYLON-MR3.ana' -> Ok au début, puis...
fabmat:00 Pert's :  81 71 00 00 00, ltmp=     2202  22028171000000   0.00   0.00, lana+imat= 1867 +   180 =  2047
fabmat:00 Les perturbations sont :  8
fabmat:00 Les perturbations sont :  8 ®
fabmat:00 Les perturbations sont :  8 ® $Î
fabmat:00 Les perturbations sont :  8 ® $Î «
fabmat:00 Les perturbations sont :  8 ® $Î « ?K
fabmat:00 Les perturbations sont :  8 ® $Î « ?K, ltmp=     2202  22028®$Ϋ?Kõ®ì\u0152?•0$=r¡¿                                        
fabmat:00 Pert's :  8 ® $Î « ?K, ltmp=     2202  22028®$Ϋ?Kõ®ì\u0152?•0$=r¡¿, lana+imat= 1867 +   181 =  2048
      file1='PY/troisième-211PYL-MR2.ana' -> Ok au début, puis...	
fabmat:00 Pert's :  81 00 00 00 00, ltmp=     2307  23078100000000   0.00   0.00, lana+imat= 1684 +   363 =  2047
fabmat:00 Les perturbations sont :  8
fabmat:00 Les perturbations sont :  8 ®
fabmat:00 Les perturbations sont :  8 ® $Î
fabmat:00 Les perturbations sont :  8 ® $Î «
fabmat:00 Les perturbations sont :  8 ® $Î « ?K
fabmat:00 Les perturbations sont :  8 ® $Î « ?K, ltmp=     2307  23078®$Ϋ?Kõ®ì\u0152?•0$=r¡¿                                        
fabmat:00 Pert's :  8 ® $Î « ?K, ltmp=     2307  23078®$Ϋ?Kõ®ì\u0152?•0$=r¡¿, lana+imat= 1684 +   364 =  2048

On voit aussi, que bien que les fichiers soient structurés légèrement différemment, l'erreur se produit toujours au même moment qui est la 2048-ième lecture. (avant la position de lecture, 2047 qui marche, et 2048 qui plante, j'ai fait s'afficher la taille des blocs du fichier d'entrée qui ont été lus jusqu'à présent, et on voit [loin à droite] que la taille du premier bloc, qui lui à été lu complètement, diffère d'un fichier à l'autre)
Et ce nombre 2048 me fait tilt à l'instant en écrivant, serait ce une limitation informatique quelconque ou quelque chose que je n'aurai déclaré qu'à 2K ?

Est-ce que quelqu'un aurait une idée de vérification à faire ? Toutes les idées et questions sont bienvenues puisqu'elles pourraient m'amener à vérifier une chose à laquelle je n'aurais pas pensé et qui pourrait peut-être m'amener à comprendre le problème.
Merci,
David

#1 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 27/01/2015, à 12:20

dva2tlse
Réponses : 25

Bonjour claudius,
le fichier fait un peu plus de 50 gigas; je ne comprends pas ce que tu veux dire par "suivre"; mais il n'est pas impossible qu'en effet les lignes lues soient mises en mémoire de façon déjà impropre; je vais vérifier ça,
Merci,
David

#2 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 27/01/2015, à 12:45

dva2tlse
Réponses : 25

Merci credenhill,
ça va me donner du boulot pour six mois de tout vérifier octet par octet ;-), mais je ne connaissais pas la commande "od";
Je ne vois pas l'intérêt de "hd" puisque le man (sur une red-hat) me parle de disque.
en tout cas merci,
David

#3 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 27/01/2015, à 13:28

dva2tlse
Réponses : 25

Merci à tous, j'ai refait tourner mon programme avec de sorties de contrôle supplémentaires; en particulier la partie ltmp(i:i+9) qui est la sous-chaine extraite d'une ligne du fichier d'entrée; c'est cette sous-chaine qui devrait être lue en cinq groupes de deux entiers; et on voit bien dès la première ligne de chaque section, que la 2047 est "propre" alors que la 2048 contient quelques insanités.

fabmat:00 ltmp(i:i+9)= :8200000000:
fabmat:00 Les perturbations sont :  82
fabmat:00 Les perturbations sont :  82 00
fabmat:00 Les perturbations sont :  82 00 00
fabmat:00 Les perturbations sont :  82 00 00 00
fabmat:00 Les perturbations sont :  82 00 00 00 00
fabmat:00 Les perturbations sont :  82 00 00 00 00, ltmp=     2307  23078200000000   0.00   0.00
fabmat:00 Pert's :  82 00 00 00 00, ltmp=     2307  23078200000000   0.00   0.00 , lana+imat= 1689 +   358 =  2047

fabmat:00 ltmp(i:i+9)= :7®$Ϋ?K:
fabmat:00 Les perturbations sont :  7
fabmat:00 Les perturbations sont :  7 ®
fabmat:00 Les perturbations sont :  7 ® $Î
fabmat:00 Les perturbations sont :  7 ® $Î «
fabmat:00 Les perturbations sont :  7 ® $Î « ?K
fabmat:00 Les perturbations sont :  7 ® $Î « ?K, ltmp=     2307  23077®$Ϋ?Kõ®ì\u0152?·0$=r¡¿
fabmat:00 Pert's :  7 ® $Î « ?K, ltmp=     2307  23077®$Ϋ?Kõ®ì\u0152?·0$=r¡¿, lana+imat= 1689 +   359 =  2048

Donc je continue mon exploration pour trouver la cause intiale de tout ceci, parce que si je traite par petits bouts de 2000 lignes alors que j'en ai deux millions, ça va me faire mille fichiers temporaires, PAS GLOP.
Merci et à bientot, dés que j'ai avancé,
David

#4 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 27/01/2015, à 14:50

dva2tlse
Réponses : 25

Après avoir un peu avancé :
Quand j'édite "à la main" le fichier d'entrée dont l'image en mémoire déconne et que je me place sur la bonne ligne, elle est parfaitement "propre"; donc ce doit être la "bufferisation" qui patine, et comme j'ai besoin que ces informations soient en mémoire, je cherche encore.

#5 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 12:43

dva2tlse
Réponses : 25

En f77 l'indexation commence à 1, mais en gfortran que j'utilise on peut commencer à 0 à condition de le déclarer, ce que je fais parfois, mais dans aucun des tableaux qui entrent en jeu ici.

Et j'ai encore un peu avancé; j'ai vérifié que le sous programme lecana, qui lit le fichier d'entrée gigantesque que j'appelle le ".ana" fonctionnait bien, et qu'il me remplissait correctement la table de deux millions de chaines de quarante caractères, représentant chacune une ligne du ".ana";
par contre, un autre sous-programme lit un autre fichier, le ".pch", en six boucles. Et ça change l'image en mémoire du grand tableau quelque part entre le milieu de la troisième boucle et celui de la quatrième.

Pourtant ce sous-programme n'agit pas du tout sur le grand tableau de lignes, puisque j'ai même dû le rajouter en argument d'entrée quand j'ai vu qu'il devenait corrompu pendant le déroulement de ce sous-programme lecpch.
Hédonc je m'apreçois que la 2048-ième ligne du tableau change pendant le déroulement de ce sous programme lecpch alors que rien ne semble le provoquer.

Si vous avez des idées, merci de me les donner pour avancer encore un peu.
David

#6 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 13:59

dva2tlse
Réponses : 25

Oui en effet, ça ressemble, mais je n'ai ni EQUIVALENCE ni COMMON dans ce programme, et une version précédente a déjà marché avec le grand tableau de deux millions de lignes;  mais c'était avant que je ne crée le sous-programme lecpch, pendant le déroulement duquel le grand tableau change. (alors que ce sous-programme n'y touche pas).
GRRR.

#7 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 14:13

dva2tlse
Réponses : 25

Le sous-programme lecpch lit des données (de contraintes) dans le ".pch", dans l'ordre où arrivent les éléments (finis), d'abord des QUAD's, puis des ROD's, puis des TRIA's (qui sont traités par la même portion de programme que les QUAD's).
Et ce sont les premiers QUAD's de la boucle 4 qui font changer le tableau.

#8 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 14:23

dva2tlse
Réponses : 25

Et ce sont les premiers QUAD's de la boucle 4 qui font changer le tableau. Et même LE premier; après le dernier TRIA (donc le dernier élémént) de la boucle 3, le grand tableau est Ok. Mais après le premier QUAD de la boucle 4, qui est aussi le premier élément, le tableau devient pourri.

#9 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 14:36

dva2tlse
Réponses : 25

Oui merci de me suggérer ça, parce que j'en connaissais l'existence sans l'avoir jamais utilisé ni vraiment savoir en détail à quoi ça servait; donc je vais regarder la doc' et peut être me lancer.

#10 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Le 28/01/2015, à 14:47

dva2tlse
Réponses : 25

Mais par contre il faudrait que j'envoie tout chez moi pour bosser "chez ma maison" pour pouvoir l'installer direct avec les liens apt, alors qu'ici au boulot, les machines sont des red hat, dont je ne sais même pas si c'est du debian, et si les admiin's peuvent installer des choses facilement. Enfin je SAIS que NON parce qu'ils ont du boulot par dessus la tête, m'enfin je vais demander en passant par un chef qu'il va falloir convaincre.

  [.../...]

Et ce que j'ai vu en commençant à potasser un peu de doc' me refroidit encore; ça parle de C/C++ et non de fortran. Donc je vais plutôt continuer d'instrumenter mon programme comme je l'ai fait jusqu'à maintenant.

#11 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Hier à 08:41

dva2tlse
Réponses : 25

Ok pour valgrind avec le fortran; maintenant il faut que je convainque mon chef pour le faire installer, puisque chez moi je n'ai qu'un petit PC ordinaire, alors qu'ici, je peux utiliser 19 coeurs de la RED HAT.

#12 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Hier à 13:31

dva2tlse
Réponses : 25

Là n'est pas le problème, pour l'instant je ne tourne que sur un seul proc'; les 19 c'est pour les runs de production qui tournent une nuit ou 20 heures avec 11000 éléments; là je n'en traite que 3, en 90s, et donc sur un seul proc'.

Et j'ai fini par localiser que ça chiait à l'élément 123 de la quatrième boucle mais je n'ai pas encore scruté le fichier d'entrée à cet endroit.

#13 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Hier à 15:15

dva2tlse
Réponses : 25

Heu... En fait il n'y a pas d'emplacement précis du fichier d'entrée avec ce que je croyais être un "caractère fantôme" puisque à chaque fois que je change le code, pour affiner ce que je supposais être une localisation dangereuse, la ligne à partir de laquelle le programme affiche des insanités change; ce qui doit bien vouloir signifier que ça dépend du remplissage de la mémoire.
Alors peut-être que Valgrind m'aiderait... ?

#14 Re : -1 »  [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. » Aujourd'hui à 09:27

dva2tlse
Réponses : 25

cette option -fsanitize=bounds n'existe pas en gfortran, mais il y en a une autre qui ressemble : -fbounds-check, et ça m'indique des tas de dépassements par le haut ou par le bas (l'indice 0) que je n'imaginais même pas, et ça finit par marcher. (enfin ça plante mais pour une autre raison, que je sais pouvoir trouver, mais le tableau des lignes du fichier d'entrée est nickel)
Merci à tous,
David

#15 -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 04/01/2015, à 16:59

dva2tlse
Réponses : 12

Bonjour, j'ai un code en python qui me permet de me logger à un site web de façon convenable, sur MON compte, mais la page d'accueil n'est pas complète, ni aucune autre.
Je sais que c'est mon propre compte puisque la partie de page qui s'affiche me montre un certain nombre de points, ou crédits, que je sais être les miens.
Par contre je ne peux pas demander d'autre page du site, puisque je n'ai que cette partie là qui vient.
Merci d'essayer de me donner des pistes pour m'en sortir,
David

Voici le code:
Il y a une page dans le vide, pour attrapper des éventuelles cookies importantes, puis une page de connexion qui marche bien, puis une lecture de page interne au site qui ne marche pas bien que je sois correctement identifié.

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import requests, sys, urllib
#---------------- Ok pour du mauvais code html; pas propre, quoi :
from bs4 import BeautifulSoup
#

url0="http://www.toto.com"
url1="http://www.toto.com/login/loginSubmit"
url2="http://www.toto.com/panelboard"
user_agent={'User-agent': 'Mozilla/5.0'}
resp0=requests.get(url0)
sess0=requests.Session()
print '\n---------------- Écriture du fichier ./resp0.html...'.encode('utf8')
Fichier=open('resp0.html', 'w')
Fichier.write(resp0.content) # text.encode('utf8'))
Fichier.close()
print ('\n\tfirefox -P def2 -no-remote resp0.html &\n')
# print resp0.headers['content-type']
#
#---------------- Ok début page 0 -------------------
#
password='VeryStrong'
pars0={ 'login': 'dva2tlse', 'pass': password }
resp1=sess0.post(url1, data=pars0)
cook1=resp1.cookies
if(resp1.status_code != 200) :
    print '\n---------------- Boum, resp1.status_code='+resp1.status_code+'\n'
    sys.exit(1)
print '\n---------------- Ok, resp1.url='+resp1.url+', resp1.status_code=%i\n' % (resp1.status_code)
# 
print '\n---------------- Écriture du fichier ./resp1.html...'.encode('utf8')
Fichier=open('resp1.html', 'w')
Fichier.write(resp1.content) # text.encode('utf8'))
Fichier.close()
print ('\n\tfirefox -P def2 -no-remote resp1.html &\n')
# print resp1.headers['content-type']
#
#---------------- page 2 : ------------------
#
resp2=sess0.get(url2, cookies=cook1)
if(resp2.status_code != 200) :
    print '\n---------------- Boum, resp2.status_code='+resp2.status_code+'\n'
    sys.exit(1)
print '\n---------------- Ok, resp2.url='+resp2.url+', resp2.status_code=%i\n' % (resp2.status_code)
# 
print '\n---------------- Écriture du fichier ./resp2.html...'.encode('utf8')
Fichier=open('resp2.html', 'w')
Fichier.write(resp2.content) # text.encode('utf8'))
Fichier.close()
print ('\n\tfirefox -P def2 -no-remote resp2.html &\n')
# print resp2.headers['content-type']
#
# python ./S.py

Merci d'essayer de m'aider,
David

#16 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 04/01/2015, à 19:07

dva2tlse
Réponses : 12

Salut grim7reaper,
en effet, j'avais posté un code où cook1 était monentanément enlevé, parce qu'il est dit dans la doc que si on utilise

sess=requests.Session()

alors il devient inutile de stocker les cookies; c'est ce que j'ai vérifié moi même.
J'ai remis dans le code la définition de cook1 après la toute première connexion au site, mais on peut très bien enlever cette définition et enlever l'appel aux cookies dans le dernier 'GET'.
Ce dernier 'GET' est quand même effectué avec mon identification; je peux le vérifier avec la première partie de la page qui s'affiche et où je vois bien que les "crédits" affichés sont les miens.
Sinon en effet, ça fait trois fois la même chose, mais je ne sais même pas comment coder une fonction en python. (je bosse en fortran et j'ai même eu des réponses à des questions à ce sujet ici sur ce forum)(ou sur devellopez.com, chaipu)
À+,
David

#17 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 05/01/2015, à 13:31

dva2tlse
Réponses : 12

Bonjour Grim7reaper,

"la page est incomplète"

ça veut dire en effet qu'il manque les liens, et même tout le corps de la page je crois.
C'est comme si je n'avais que le header qui s'enregistrait; pourtant j'ai regardé le code HTML qui est enregistré, et il se temine bien par <\body> puis <\html>.

Maintenant en effet les liens ne sont pas tout à fait corrects. Il y a bien une sifférence de "#" entre mon navigateur et ce qui est enregistré, du genre de "http://www.toto.com/home#/panelboard/" enregistré au lieu de "http://www.toto.com/panelboard" dans le navigateur. (Je ne suis pas parfaitement sûr parce que je réponds de mon boulot, "en aveugle", mais il y a une différence de "#"; qu'est-ce que ça veut dire ?)

Ce panelboard est juste une étape, puisqu'il contient des liens pour atteindre les pages que je souhaite; donc j'aurai une boucle sur les liens qu'extraiera un truc comme Beautiful Soup ou mechanize.

L'anglais, j'en bouffe une bonne partie de la journée au boulot; je manque juste quelques nuances du fait que ce n'est par ma langue maternelle, mais c'est plus fatigant, donc je trouverai des tutos confortablement écrits en français.

sur des questions Fortran

  je me souvenais de ton pseudo à propos de questions assez intéressantes, comme par exemple du fortran qui contribue à me remplir mon assiette, mais d'autres aussi, je ne suis pas seulement vénal.
À+,
David

#18 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 07/01/2015, à 17:24

dva2tlse
Réponses : 12

Bonjour Grim7reaper,
les codes HTML que j'obtiens par mon script python et le code que mon navigateur affiche sont forcément exactement les mêmes, puisque je ne fais qu'afficher avec mon navigateur ce que j'ai reçu par le code python, et enregistré dans un fichier resp1.html, puis resp2 et resp3; je ne sais pas faire autrement que passer par l'intermédiaire d'un fichier enregisté. Comment est-ce qu'il faut faire ? Peut-être qu'alors j'aurai tout ce que je veux.
Par ailleurs, le Javascript, il y en a effectivement pas mal dans le fichier que j'enregistre et dont je ne visualise que le début, ou qu'une partie; est-ce que ça pourrait être lui qui empêche l'affichage de la fin des pages, ou du reste ?
À+,
David

#19 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 09/01/2015, à 14:08

dva2tlse
Réponses : 12

Bonjour grim7reaper,
je crois avoir déjà répondu hier mais ça n'est pas passé; m'enfin peu importe, sauf que ce que tu écris me fait penser à un truc : je vais ouvrir mon site directement dans mon firefox pour en voir le contenu de la page avec un CTRL+U, et l'enregistrer quelquepart.
Hédonc je pourrai essayer de comparer avec celle que reçoit et enregistre le python.
Mais il se trouve par ailleurs, que quand j'ai le début de la homepage du site, après que le python m'y ait connecté, je peux prendre la main à ce moment-là; et c'est peut-être là que s'exécute le javascript qui affiche la fin de la page, d'où la différence entre l'accès "à la main" et l'accès par python.
Est-ce que ce que je dis est cohérent, ou est-ce que c'est du n'importe nawak ?
David
PS: je n'ai peut-être pas tout compris comment marchait le javascript, d'où l'imprécision de ma question, mais peut-être qu'il faut travailler en interactif pour que le javascript tourne, et est-ce qu'il n'y aurait pas moyen que ça tourne "depuis" un script quand même ? à+, David

#20 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 12/01/2015, à 12:36

dva2tlse
Réponses : 12

Bonjour grim7reaper,
j'ai un peu laissé tomber l'affaire, enfin, un petit peu seulement; disons que je cherche tojours à visiter des sites après identification, mais en utilisant scrapy; c'est du python aussi comme tu le sais probablement, et dès que j'aurais un peu de temps, j'ouvrirai une nouvelle question sur ce que je n'arrive pas à faire. (pourtant, tout semble prévu, mais je ne maitrise pas encore tout)
à+,
David
PS: juste avant de poster, je revois tes deux questions précédentes, et d'après ce que j'avais posé comme nouvelles questions, je crois me souvenir que ce sont "à peu près" les mêmes pages, (même contenu à l'oeil vite fait, avec du javascript les deux fois, mais je ne sais pas le lire) donc c'est pour ça que je demandais si le javascript ne s'exécuterait pas QUE en interactif, ce qui expliquerait que la page pourtant à peu près similaire enregistrée par le python ne déroulerait pas jusqu'au bout.

#21 Re : -1 »  Connection en python correcte, mais navigation dans le site impossible » Le 13/01/2015, à 12:57

dva2tlse
Réponses : 12

Salut grim7reaper,
en effet, le javascript ne tourne pas dans scrapy, mais j'ai vu sur StackOverflow qu'il y a des tas d'exemples avec selenium, et des problèmes souvent résolus ce qui aide à comprendre. (tout comme avec scrapy d'ailleurs, donc je vais "pomper" un max de choses parce que je ne me débrouille pas encore assez)
À+,
David

#22 Re : -1 »  [PAS RÉSOLU] Se logger sur un site web en python par une requête POST » Le 30/12/2014, à 11:43

dva2tlse
Réponses : 7

Bonjour grimp7reaper,
j'en suis à essayer de lire les réponses qui me reviennent des requêtes POST pour essayer de comprendre ce qu'il se passe. J'ai réussi à en stocker une dans un fichier avec le code suivant, extraordinairement compliqué pour moi : (je ne connais que le fortran)

NomFichier = 'resp2.txt'
# création et ouverture du fichier resp2.txt en mode write 'w' (écriture)
# si le fichier test.txt existe déjà, il est écrasé
Fichier = open(NomFichier, 'w')      # instanciation de l'objet Fichier de la classe file
# écriture dans le fichier avec la méthode write()
Fichier.write(resp2.text.encode('utf8'))
# fermeture du fichier avec la méthode close()
Fichier.close()

Mais ce qu'il se passe quand j'essaye de le lire,

firefox resp2.txt &

hébin je me retrouve avec du code html assez incompréhensible pour moi, qui commence par :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>...

Est-ce qu'il faut enlever ou commenter (et comment) la première ligne pour que mon firefox le représente bien comme une page html et que je puisse essayer de comprendre ce qu'il s'est passé ?
Merci de m'aider encore,
David

EDIT À PEINE APRES :
Je suis un gros nââze, mon fichier portait l'extention ".txt" au lieu de ".html", donc FF l'ouvrait comme du texte, GRRR kilekon.

#23 Re : -1 »  [PAS RÉSOLU] Se logger sur un site web en python par une requête POST » Le 31/12/2014, à 10:20

dva2tlse
Réponses : 7

Non je ne peux pas répondre parce que j'ai des hackers chinois du FBI qui sont à mes trousses, donc motus...

Par contre, en regardant avec mon firefox la dernière page html que me renvoie le site, je m'aperçois que c'est une page d'erreur qui me demande de remplir les champs "pseudo" et "mot de passe" d'un deuxième formulaire nommé "/login/loginSubmit" (comme le premier, pour lequel j'avais déjà envoyé une requête POST, qui semble n'avoir pas été honorée), et qui est à remplir pour se connecter, en fournissant un "login" et un "pass", comme d'après le code ci dessous que j'ai extrait de la page :

            <td><input type="text" value="pseudo" class="input" name="login" id="login" /></td>
            <td><input type="password" value="pass" class="input" name="pass" id="pass" /></td>

Mais nouveau problème : ma requête est :

resp2 = sess2.post(url2, data=pars2) # Sends a POST request. Returns Response object

avec :

pars2 = dict(login = login, password = password)

Or le formulaire demande une variable nommée "pass" en second, et si je fais la requête POST avec une telle variable "pass" :

pars2 = dict(login = login, pass = password)

Alors le script python ne s'exécute plus pour la raison suivante :

david@test:~/HHH/PYTHON$ python 02AuthCook.py|m
  File "02AuthCook.py", line 30
    pars2 = dict(login = login, pass = password)
                                   ^
SyntaxError: invalid syntax
david@test:~/HHH/PYTHON$ 

Comment lever ce Pb de syntaxe ?
David

EDIT: Ok pour la sytaxe de "password" bien que le formulaire ne demande que "pass", et ça va jusqu'au bout sans erreur de python, mais je ne suis toujours pas loggé sur le site.

EDIT2: C'était juste la syntaxe de mon dictionnaire de valeurs passées à la requête POST qui n'était pas bonne; il fallait mettre :

pars = { 'login': 'dva2tlse', 'pass': password }

#24 Re : -1 »  [PAS RÉSOLU] Se logger sur un site web en python par une requête POST » Le 31/12/2014, à 16:18

dva2tlse
Réponses : 7

Hébé non, en fait le pb n'est pas résolu...
-Il semblerait que le code passe bien la première phase d'identification, puisque la page que j'enregistre après la requête POST d'identification initiale pour pouvoir la consulter à ma guise, me montre bien certaines informations personnelles qui prouvent que je suis bel et bien identifié correctement sur le serveur.
-par contre, je n'ai pas la totalité de la page d'accueil, et lors d'une deuxième requête, par un GET, sur une page interne au site à laquelle je devrais avoir accès maintenant que je suis identifié, je n'en ai qu'une partie également, le fond de page qui dont être constant sur tout le site une fois que l'on est identifié.
Que peut il se passer ?
David

EDIT  jeudi 1er janvier 2015 : (bonne année à tous)

Il me reste à regarder tous les objets "fils" de la page :
À la base j'ai :

password = 'VeryStrong'
sess = requests.Session()
user_agent = {'User-agent': 'Mozilla/5.0'}
pars11 = { 'login': 'dva2tlse', 'pass': password }
url11 = "http://www.truc-truc.com/login/loginSubmit"
resp11 = sess.post(url11, data=pars11) # Sends a POST request. Returns Response object
url12 = "http://www.truc-truc.com/home"
resp12 = sess.get(url12)

Il y a aussi comme "fils" d'un "Response object" comme le sont resp11 et resp12 :
resp11.content
resp11.headers
resp11.read (pas encore sûr que ça existe)
resp11.status_code
resp11.text
resp11.url

EDIT2 :
Peut-être qu'il y a des histoires de redirections que je devrais peut-être autoriser dans des heaaders que j'enverrai chaipakan, mais c'est flou pour moi; qu'en faire ?