2011-05-28 2 views
1

J'ai essayé de faire fonctionner le module de mécanisation avec GAE, mais pas de chance. J'ai utilisé la dernière version de mechanize et les versions qui sont GAE spécifiques à partir d'ici Python Mechanize + GAEpython code.Module de mécanisation pour GAE

Ce que je veux faire est de se connecter à un site Web et soumettre un formulaire.

code Exemple

import mechanize 

def mech(uname,passw,txtto,msg): 
    br = mechanize.Browser() 
    br.open("http://example.com") 
    br.select_form(nr=0) 

    br["username"]= uname 
    br["password"]= passw 
    # br.form 

    response = br.submit() 
    br.select_form(nr=0) 
    # print br.form 

    br["txt"] = txtto 
    br["message"] = msg 

    br.submit() 
    br.back() 

Avec module mécaniser je reçois

'str' object has no attribute 'fileno' 

et gaemechanize je reçois

app.mechanize.ClientForm.ControlNotFoundError 

ControlNotFoundError: no control matching name 'txt' 

Le code est testé et fonctionne en dehors Gae cela est donc pas problème. J'utilise le framework kay si cela peut aider.

+0

S'il vous plaît ajouter un exemple de code, sinon il est très difficile de vous aider. –

+0

a édité mon post pour mieux décrire le problème –

+0

quelle est la sortie de 'print br.form'? – cerberos

Répondre

0

Il semble que vous essayez de le faire à partir d'une application Python GAE. Il existe de nombreuses restrictions sur ce que le code GAE non-flex-environment peut faire (par exemple, des restrictions sur l'envoi vers d'autres processus, etc.) qui n'existent pas dans Google Cloud Functions. Je vous recommande d'essayer ceci à partir d'une fonction Google Cloud. Bien qu'il n'existe pas (encore) de support python officiel pour GCF, il existe un github project qui vous permettra de déployer du code python vers GCF.

J'ai pu obtenir un code d'automatisation de navigateur similaire pour fonctionner dans GCF en utilisant un plugin Node.js chrome remote, donc je pense que GCF fonctionnera aussi pour vous. L'utilisation d'une fonction cloud enlèvera également beaucoup de charge de votre application GAE, c'est donc une meilleure solution, car c'est vraiment un travail de fond. Que vous décidiez d'utiliser Node.js ou Python pour écrire votre fonction cloud, une fois configuré, vous pouvez facilement l'appeler à partir d'un déclencheur Pub/Sub ou HTTP à partir de votre application Python GAE.

https://cloud.google.com/functions/

+0

note: parce que vous mentionnez que le code fonctionne en dehors de GAE, je serais assez confiant que l'une des limitations du code GAE de l'environnement standard empêche cela de fonctionner –

Questions connexes