mechanize kann das Formular nicht mit SubmitControl lesen, das deaktiviert ist und keinen Wert hat

8

Ich versuche, mechanize (v0.2.5) zu verwenden, um mit einem Formular auf einer Seite zu arbeiten, die ein deaktiviertes Bild als eines der Formularelemente enthält. Wenn ich versuche, das Formular auszuwählen, erhöht mechanize AttributeError: control 'test' is disabled , wobei test der Name des deaktivierten Steuerelements ist. Zum Beispiel

%Vor%

Führt zu diesem Stack-Trace:

%Vor%

Wenn wir den mechanisierten Quellcode untersuchen, sieht es so aus, als ob dieser Fehler immer dann auftritt, wenn es ein Formularelement gibt, das ein mechanize.SubmitControl ergibt und das kein vordefiniertes value -Attribut hat. Beispielsweise würde das folgende Formular den gleichen Fehler auslösen:

%Vor%

Ich bin mir nicht sicher, ob das als Bug zählen sollte, aber gibt es in jedem Fall einen Workaround? Gibt es beispielsweise eine Möglichkeit, den HTML-Code der Zielseite zu ändern, um die deaktivierten Steuerelemente zu aktivieren, bevor ich br.select_form() ?

aufruft?

BEARBEITEN

Ich habe einen Patch zur Mechanisierung eingereicht, der dieses Problem behebt.

    
Abiel 12.02.2012, 15:33
quelle

2 Antworten

8

Leider ist es mehr als ein Jahr her und der Mechanize-Upstream hat die Pull-Anfrage immer noch nicht zusammengeführt .

Inzwischen können Sie diesen Affen-Patch, den ich geschrieben habe, verwenden, um den Fehler zu umgehen, ohne eine gepatchte Version manuell installieren zu müssen. Hoffentlich wird dieser Fehler behoben, wenn (wenn) 0.2.6 veröffentlicht wird, also gilt der Patch nur für Versionen 0.2.5 und früher.

%Vor%     
intgr 03.03.2013 17:12
quelle
0

Das ist definitiv ein Bug, der es upstream meldet, einen Patch macht, ihn upstream sendet und in der Zwischenzeit die gepatchte Version verwendet, ist ein ziemlich richtiger Weg, damit umzugehen. (Danke, dass du diesen Weg gewählt hast.)

Wie Sie bereits erwähnt haben, ist es ein anderer Ansatz, es durch Vorverarbeitung von Quell-HTML zu bearbeiten (das kann nützlich sein, wenn Sie in Eile sind oder die gepatchte Version aus irgendeinem Grund nicht verwenden können / wollen), aber beachten Sie dass Workarounds der Community nicht helfen). Für die Nachbearbeitung kann jede geeignete Methode verwendet werden - von str.replace () bis zur Verarbeitung auf DOM-Ebene mit BeautifulSoup oder lxml .

    
pfalcon 30.08.2012 09:51
quelle

Tags und Links