2010-08-17 20 views
0
for control in form.controls: 

     if control.type == 'text': 
      if 'user' in control.name: 
       control.value = 'blah' 
      if 'mail' in control.name: 
       control.value = 'blah' 

     if control.type == 'password': 
      if 'pass' in control.name: 
       control.value = 'blah' 

     if control.type == 'checkbox': 
      if 'agree' in control.name: 
       control.selected = True 

     if control.type == 'submit': 
      if 'Submit' in control.name: 
       control.readonly = False 

Je remplis le formulaire de cette façon. Ensuite, je vais sélectionner la case à cocher "Accepter", après cela j'essaie d'utiliser br.submit() pour soumettre le formulaire et envoyer les données. L'erreur que je l'obtenir:Utilisation de Mechanize pour soumettre un formulaire pour l'automatisation Web - renvoi d'une erreur

AttributeError: instance submitcontrol n'a pas d'attribut 'cliquez sur'

C'est la source HTML des soumettre et accepter les contrôles:

<input type="submit" name="regSubmit" value="Register" /> 
<label for="regagree"><input type="checkbox" name="regagree" onclick="checkAgree();" id="regagree" class="check" /> <b>I Agree</b></label> 

La source HTML de ce site particulier a ce JavaScript:

function verifyAgree() 
{ 
    if (document.forms.creator.passwrd1.value != document.forms.creator.passwrd2.value) 
    { 
     alert("The two passwords you entered are not the same!"); 
     return false; 
    } 

    if (!document.forms.creator.regagree.checked) 
    { 
     alert("Please read and accept the agreement before registering."); 
     return false; 
    } 

    return true; 
} 
function checkAgree() 
{ 
    document.forms.creator.regSubmit.disabled = isEmptyText(document.forms.creator.user) || isEmptyText(document.forms.creator.email) || isEmptyText(document.forms.creator.passwrd1) || !document.forms.creator.regagree.checked; 
    setTimeout("checkAgree();", 1000); 
} 
setTimeout("checkAgree();", 1000); 

Lorsque je tape des formes d'impression en IDLE, le formulaire est retourné comme rempli et tous les contrôles appropriés sont sélectionnés. Je ne peux pas pour la vie de moi comprendre pourquoi cela ne fonctionne pas. Je suis là depuis deux jours.

L'aide est grandement appréciée.

Répondre

0

Pourquoi ne pas simplement soumettre le formulaire tel qu'il apparaît in the documentation sample:

br.select_form(name="whatever") 
response = br.submit() 

En cliquant sur ce bouton est juste une façon de soumettre le formulaire; L'utilisation de JavaScript en est une autre. Vous n'avez donc pas besoin de passer par la recherche du contrôle de soumission.

+0

Malheureusement, cela n'a pas fonctionné non plus. voici le site im essayant d'utiliser mon script pour créer un compte et vous inscrire à http://www.energysuspension.com/forum/index.php?action=register vous pouvez voir le javascript et tel, je ne comprendre pourquoi ça ne marchera pas. après la soumission, il me renvoie juste à http://www.energysuspension.com/forum/index.php?action=register (la même page) et les formulaires sont tous vides. – gurk

1

Nous avons constaté que Mechanize a souvent des problèmes avec du Javascript sur certaines pages. Ce n'est pas une surprise, car ce n'est pas un vrai navigateur web => l'avez-vous essayé avec un outil basé sur un vrai navigateur? (par exemple WatiN ou iMacros pour IE/Firefox/Chrome)?

+0

ouais, je l'ai déjà essayé. J'ai pu enregistrer un compte à la main sur ce site particulier. pourtant mon programme python n'a pas pu s'inscrire sur ce site. Voici le site Web que j'essaie d'enregistrer sur l'utilisation de mécaniser. Je suis toujours incapable d'obtenir mon petit script pour créer un compte. C'est assez frustrant car je ne comprends pas la raison pour laquelle ça ne marche pas. Je vous invite à tenter de vous inscrire. http://www.energysuspension.com/forum/index.php?action=register vous pouvez voir le javascript qui agit sur la page par la source (comme je suis sûr que vous le savez) Merci pour votre temps – gurk