Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/01/2015, à 16:59

dva2tlse

Connection en python correcte, mais navigation dans le site impossible

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

Dernière modification par dva2tlse (Le 04/01/2015, à 18:51)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#2 Le 04/01/2015, à 18:43

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

Salut,

Pour commencer, il faudrait que tu postes le code que tu utilises actuellement, car le code de ton premier message ne peut pas fonctionner (cook1 est utilisé mais jamais défini).
Bon sinon, il y a pas mal de choses qui pourrait être amélioré dans ce code (utiliser des fonctions pour le code qui se répète par exemple) mais bon c’est pas le problème principal pour le moment, on verra ça après.

Hors ligne

#3 Le 04/01/2015, à 19:07

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#4 Le 04/01/2015, à 22:04

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

Salut,

dva2tlse a écrit :

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.

En effet, l’objet Session gère les cookies, je l’ignorais.

dva2tlse a écrit :

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.

Que veux tu dire quand tu dis que la page est incomplète ? Il manque des liens ?

En parlant de lien, est-ce que tu es sûr que les tiens sont correctes ? Quand tu vas sur la page avec ton navigateur, est-ce qu’il t’affiche la même URL ?
Par exemple, le lien serait "http://www.toto.com/home#/panelboard/" au lieu de "http://www.toto.com/panelboard".

La page que tu veux afficher c’est ce panelboard ou c’est juste une étape pour atteindre la page que tu souhaites voir ?

dva2tlse a écrit :

Sinon en effet, ça fait trois fois la même chose, mais je ne sais même pas comment coder une fonction en python.

Il y a pas mal de bon tuto, l’anglais te dérange ou ça va ?

dva2tlse a écrit :

(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)

Sur les deux en fait, et en ce qui me concerne je t’ai déjà répondu sur ce forum sur des questions Fortran wink

Hors ligne

#5 Le 05/01/2015, à 13:31

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#6 Le 06/01/2015, à 15:15

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

Salut,

Bizarre ça.
Est-ce que tu as comparé le code HTML que tu obtiens via ton code Python et le code que ton navigateur t'affiche (visible via Ctrl+U si tu utilises Firefox) ?
Ils diffèrent ou le code HTML est le même (je parle du code HTML, pas de l’aspect visuel) ?

Une explication possible (et probable) est qu’une partie de ce que tu vois soit généré via Javascript (et donc exécuté et généré par ton navigateur Web) et dans ce cas c‘est normal que ce que tu vois dans ton navigateur soit différent de ce que tu récupère via Python (mais le code HTML doit être le même).

Sinon, je ne sais pas quels lien tu veux accèder, mais si tu connais l’URL tu peux taper directement dessus après t’être identifié.
Par exemple pour accéder avec cette discussion, je dois:
- me logger
- j'arrive sur le forum (http://forum.ubuntu-fr.org/index.php)
- je vais dans la section « Développement et programmation » (http://forum.ubuntu-fr.org/viewforum.php?id=35)
- je vais dans ce topic (http://forum.ubuntu-fr.org/viewtopic.php?id=1759031)

Mais quand en Python, une fois que je suis loggué je pourrais directement taper dans http://forum.ubuntu-fr.org/viewtopic.php?id=1759031, pas besoin de faire le cheminement comme un humain en cliquant à droite à gauche.
Bien sûr, si tu ne connais pas les liens que tu veux aller voir (car c'est une liste généré dynamiquement par exemple, alors mon exemple n’est pas applicable)

Hors ligne

#7 Le 07/01/2015, à 17:24

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#8 Le 07/01/2015, à 17:54

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

dva2tlse a écrit :

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

Je voulais que tu compares le contenu du fichier et le code HTML quand tu visites le site avec ton navigateur (pas quand tu ouvres le fichier que tu as généré).

dva2tlse a écrit :

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 ?

Non, mais le Javascript est exécuté par ton navigateur et ça génére peut-être du code HTML supplémentaire.
Par contre, quand tu récupères le HTML via Python le Javascript n’est pas exécuté et ça pourrait expliquer la différence.

Dernière modification par grim7reaper (Le 07/01/2015, à 17:57)

Hors ligne

#9 Le 09/01/2015, à 14:08

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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

Dernière modification par dva2tlse (Le 09/01/2015, à 14:09)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#10 Le 11/01/2015, à 20:55

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

dva2tlse a écrit :

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.

C’est exactement ce que je te suggérais de faire smile
Alors, quel est le résultat ?
Est-ce que tu récupères la même chose ?
Est-ce que les liens que tu cherches sont dedans ?

dva2tlse a écrit :

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 ?

Je ne suis pas sur d’avoir bien compris ce que tu voulais dire, donc je ne peux pas vraiment répondre hmm

dva2tlse a écrit :

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

Il y a peut-être des moyens en Python, il faudrait que je me renseigne car je n’ai jamais fait.

Hors ligne

#11 Le 12/01/2015, à 12:36

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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.


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#12 Le 12/01/2015, à 14:49

grim7reaper

Re : Connection en python correcte, mais navigation dans le site impossible

Ok.
Les pages sont donc très certainement identiques alors (tu pourrais lancer la commande diff sur les deux fichiers pour en être sûr).
Oui, le Javascript ne s’exécute qu’en « interactif » (en fait il s’exécute dans ton navigateur Web car les navigateurs ont un interpréteur Javascript embarqué, ce qui n’est pas le cas de ton script Python).
Je ne sais pas si scrapy gère le JavaScript, une solution pourrait être de passer par Selenium (apparemment il est possible d’utiliser les deux conjointement). Mais là je suis comme toi, je découvre…

Hors ligne

#13 Le 13/01/2015, à 12:57

dva2tlse

Re : Connection en python correcte, mais navigation dans le site impossible

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


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne