2010-07-16 4 views
1

J'ai un script python qui prend un certain nombre de variables. J'ai aussi une page html qui peut recevoir des valeurs de poste.Comment puis-je utiliser python pour charger une session de navigateur qui publie des valeurs dans une URL?

Comment puis-je démarrer un navigateur à partir de python et le pointer vers la page html ci-dessus et envoyer ces variables post à l'URL html? Le problème que j'ai est que si j'utilise urllib/urllib2 pour faire le post, il ne charge pas la fenêtre du navigateur. Et si je veux charger une fenêtre de navigateur, je ne peux pas envoyer de message à l'url.

C'est comme ça que vous pouvez faire un POST à ​​un URL mais cela n'ouvre pas un navigateur, mais il peut recevoir des valeurs de retour comme ça. Mais je n'ai pas besoin de relire les valeurs, j'ai besoin d'ouvrir un navigateur Internet, de le pointer vers une URL spécifique et d'envoyer les variables à cette URL.

data = urllib.urlencode({"fileTitle" : "ThisFileName", "findtype" : "t", "etc" : "etc"}) 
f = urllib.urlopen("http://www.domain.com/someurl/", data) 
# Read the results back. 
s = f.read() 
s.close() 
+0

veuillez préciser: Quel système d'exploitation utilisez-vous? Où le script python est-il en cours d'exécution? Pourquoi est-il marqué php? Que voulez-vous dire par la fenêtre du navigateur? Voulez-vous démarrer un navigateur local avec un site spécifique? Peut-être que cela pourrait aider si vous postez - au moins les parties pertinentes - votre script python. – jigfox

+0

L'OS n'a pas d'importance ici car ce script fonctionnera sous Windows, Linux et Mac. Il est étiqueté php parce que PHP est utilisé pour obtenir les variables POST. Ce que je veux dire par navigateur, c'est qu'il charge IE/Chrome/Firefox avec une URL spécifique. Oui, je souhaite démarrer un navigateur local avec une URL de site spécifique. – Martin

Répondre

0

Cela semble être la seule façon d'obtenir ce que je veux faire.

Vous pouvez utiliser urllib pour appeler une page sur le serveur qui stocke les données (dans une table sql ou dans un fichier temporaire) et renvoie un identifiant unique. Vous pouvez ensuite utiliser l'identifiant unique pour extraire les données de sa source connue.

Le code python ressemblera à quelque chose comme ceci:

import urllib 
data = urllib.urlencode({"postField1" : "postValue1", "postField2" : "postValue2", "etc" : "etc"}) 
f = urllib.urlopen("http://www.domain.com/storePostData.php", data) 
# At this point your storePostData.php file stores all the post 
# info in either an sql DB or temporary file so this can accessed later on and 
# an uuid is passed back which we now read below. In may case I store all post   
# fields in a sql DB and each column represents each post field. 
uuid = f.read() 
# the uuid is the sql table id field which is auto_incremented. 
# SO now we load the default browser below and send it the uuid so the php script 
# can access the sql data. Once it has been accessed and the form fields have been 
# received then we delete that row as the information is useless to us now that we 
# have filled in the forms fields 
import webbrowser 
webbrowser.open_new("http://www.domain.com/someOtherUrl?uuid=" + uuid) 

Tout le reste du travail est effectué par les scripts PHP, où il stocke les informations, puis récupère les informations sur la base UUID. Je ne vais pas donner un exemple du code ici, car ce n'est que des connaissances générales et tout ce que j'essaie de faire, c'est de faire passer le concept ici.

J'espère que cela aide quelqu'un.

Salutations

0

Les valeurs doivent-elles être fournies via HTTP POST? Pourriez-vous fournir les paramètres dans le cadre de l'URL et utiliser un GET à la place?

par exemple. Construire une URL semblable à ce qui suit:

http://somehost/somefile.html?param1=value1&param2=value2& ...

+0

Non, il y a trop d'informations à fournir via la méthode GET. Cela ne cadrerait jamais avec l'url. – Martin

+0

Peut-être pourriez-vous créer un fichier html temporaire contenant javascript pour créer votre requête et la soumettre. Ensuite, appelez le navigateur pour charger le fichier temporaire? – Vortura

+0

C'est une possibilité.J'ai eu l'idée d'utiliser urllib pour appeler une page sur le serveur qui stocke les données (soit dans une table sql ou dans un fichier temporaire) et retourne un identifiant unique. Ensuite, lorsque vous ouvrez le navigateur et pointez sur l'URL, vous faites quelque chose comme www.domain.com/urlstring&uuid=knfjkNh89HFndsadaFGJSss334. Ensuite, je peux utiliser l'identifiant unique pour récupérer les données de sa source connue. Je me demandais simplement s'il y avait une façon plus simple de le faire plutôt. – Martin

0

"... il ne charge pas la fenêtre du navigateur." Désolé, je ne comprends pas vraiment ce que vous essayez de faire. Mais Selenium Remote Control (RC) est peut-être intéressant pour vous. Vous pouvez écrire des scripts pour contrôler à distance un navigateur. Il est utilisé pour les tests automatisés. Python est également supporté. Vous pouvez faire le navigateur pour soumettre des formulaires ou cliquer sur des liens par exemple. aux scripts PHP ou autre.