2009-12-02 10 views
0

Je crée un script en utilisant Python Mechanize qui peut se connecter à un site Web et soumettre un formulaire. Toutefois, ce formulaire comporte 3 boutons d'envoi (Aperçu, Message et Annuler). Je suis habitué à un seul bouton ...Comment soumettre un formulaire avec plus d'un bouton de soumission. Envoyer un POST à ​​un site Web. (Python)

C'est la forme:

<TextControl(subject=Is this good for the holidays? Anyone know about the new tech?)> 
    <IgnoreControl(threads=<None>)> 
    <TextareaControl(message=Im new to technology stocks.)> 
    <SelectControl(identity=[*annamae41g])> 
    <RadioControl(E=[5, 4, *3, 2, 1, 0])> 
    <SubmitControl(SubmitPreview=Preview Message) (readonly)> 
    <SubmitControl(SubmitPost=Post Message) (readonly)> 
    <SubmitControl(SubmitCancel=Cancel) (readonly)> 
    <HiddenControl(action_btn=) (readonly)> 
    <HiddenControl(_charset_=) (readonly)> 
    <HiddenControl(.crumb=4DxnFEwMIGG) (readonly)> 
    <HiddenControl(r=/Stocks_(A_to_Z)/Stocks_G) (readonly)> 
    <HiddenControl(bn=25263) (readonly)> 
    <HiddenControl(<None>=annamae41g) (readonly)>> 

Et voici mon code:

br.open(newtopic_url) 
br.select_form(name="postmsg") 
br.form['subject'] = "Is this good for the holidays? Anyone know about the new tech?" 
br.form['message'] = "Im new to technology stocks." 
br.form['E'] = ['3'] 
br.form['identity'] = ['annamae41g'] 
print br.form 
br.submit() 

Si je lance ce script ... il a gagné ne fonctionne pas. Rien ne se passe. Je suppose qu'il a 3 boutons de soumission dans le formulaire? Ou est-ce un autre problème?

+1

Le code que vous affichez dans "ceci est le formulaire" ne ressemble pas à HTML - savez-vous ce que c'est? Pouvez-vous utiliser un sniffer pour savoir ce qu'il envoie (vraisemblablement via HTTP post) à son serveur dans les différents cas? –

+0

Salut Alex, C'est en fait "print br.form". Cependant, j'ai résolu le problème. – TIMEX

Répondre

0

problème résolu.

N'utilisez pas python mechanize. Il ne vous permettra pas d'envoyer d'autres données postales.

Pour une raison quelconque, les données de publication actuellement dans la question ne sont PAS suffisantes. Il y a d'autres choses qui doivent être envoyées au serveur. Par conséquent, vous devez utiliser la méthode opener/cookiejar régulière pour envoyer toutes les données. J'ai reçu les données supplémentaires (en plus du sujet, message, E, identité) de Firebug (en regardant le NET)

4

J'ai eu le même problème que vous.

Un formulaire avec deux boutons d'envoi, le premier était l'aperçu, le second était soumettre.

Dans un premier temps, mécaniser utilisait seulement le premier bouton, je pouvais voir la réponse du serveur à l'aide

response = browser.submit() 
print response.read() 

Je mets le soumettre le nom du bouton comme paramètre à la mécaniser présenter la fonction, et cela a fonctionné!

response = browser.submit("submit") 

Testez-le, cela devrait fonctionner pour vous aussi!

+0

Cette méthode a fonctionné pour moi aussi – user567879