Verwenden Sie Mechanisieren, um Formular ohne Kontrollturnier einzureichen

Ich versuche zu verwenden Mechanisieren für Python, um ein Formular einzureichen, aber die Formularsteuerung, die ich ausfüllen muss, hat keinen Namen, der ihm zugeordnet ist.

<POST https://sample.com/anExample multipart/form-data <HiddenControl(post_authenticity_token=) (readonly)> <HiddenControl(iframe_callback=) (readonly)> <TextareaControl(<None>=)>> 

Die Kontrolle, die ich bearbeite, ist die letzte Steuerung im obigen Objekt, <TextareaControl(<None>=)> .

Ich habe mir die Dokumentation angesehen und kann nicht scheinen, einen Weg zu finden, einen Wert zu diesem Steuerelement zuzuweisen, da es keinen Namen hat, der mit ihm verbunden ist.

  forms = [f for f in br.forms()] print forms[2].controls[5].name 

Ausgänge "Keine"

  • Mit Mechanisieren auf eine Webseite anmelden
  • Sind Cookies in einem Mechanize Browser zwischen öffnen URLs gehalten?
  • Set Mechanize, um Cookies zu akzeptieren
  • Python Mechanize hält mich 'response_seek_wrapper', wenn ich versuche zu verwenden .open
  • Force python mechanize / urllib2 nur A Anfragen verwenden?
  • Python-Browser-Emulator mit JS-Unterstützung
  • Mechanisiere br.mitmit () Einschränkungen?
  • HTTP-Antwort mit Mechanize in Python abrufen und einfangen
  • One Solution collect form web for “Verwenden Sie Mechanisieren, um Formular ohne Kontrollturnier einzureichen”

    Also, ich gebe dir, dieser war ziemlich hart, um herauszufinden. Hatte buchstäblich einen Blick auf den mechanize selbst, um herauszufinden. Leider konnte ich es nicht sicher auf einem tatsächlichen Formulareinzelteil ohne Namensattribut testen, obwohl ich das tun kann, wenn du die Seite verstellst, die du zu ziehen suchst, oder du kannst es selbst machen.

    Die Formgegenstände ehrlich sind nicht so gut für die Usability implementiert. Der einzige Weg, den ich für Sie sehen kann, bearbeitet den Wert eines namenlosen Formulars, indem er die Methode set_value des Formulars verwendet :

     class HTMLForm: # <...> set_value(value, name=None, type=None, kind=None, id=None, nr=None, by_label=False, # by_label is deprecated label=None) 

    Also, was Sie hier tun, um die Kontrolle, die Sie suchen, ist mit dem nr Argument zu greifen, mit dem Index der Kontrolle in der Form. Leider kannst du keine negativen Ganzzahlen verwenden, um Kontrollen von hinten zu greifen, also um die letzte Form zu nr=len(myform.controls)-1 musst du etwas in der Linie von nr=len(myform.controls)-1 .

    In jedem Fall, was Sie hier tun können, ist Gebrauch, dass set_value Methode, und Sie sollten als solche gesetzt werden:

     forms[2].set_value("LOOK!!!! I SET THE VALUE OF THIS UNNAMED CONTROL!", nr=5) 

    Und das sollte für dich arbeiten Lass mich wissen, wie es geht

    Python ist die beste Programmiersprache der Welt.