2017-09-24 3 views
-1

Ich schreibe ein Python-Autofill-Skript mit Selen und Python 3.6. Ich möchte so schnell wie möglich Texteingabefelder ausfüllen. Ich gerade jetzt:Python Selen wie man viele Textfelder gleichzeitig ausfüllt

driver.execute_script("document.getElementById(--the elements ID--   
-).value='%s'" % ---what I want script to fill the box with---) 

Ich wiederhole diese Codezeile für jede der Eingabetextfelder der Website autofilled werden. Dies ist schnell, aber es füllt jedes Textfeld einzeln aus. Ich möchte alle Eingabefelder auf einmal mit verschiedenen Werten füllen, ähnlich der Chrome-Erweiterung "AutoFill". Alle Hilfe wird geschätzt.

Antwort

0

1) eine Javascript-Datei auf lokale zusammen mit Ihrem Auto-Skript vor, eine Funktion darin definieren und ein Objekt übernehmen, die alle Felder enthalten schätzen Sie wollen setzen, in Funktionskörper Element finden und Wert setzen.

function autofill(values) { 
document.querySelector("#username").value = values.username; 
document.querySelector("#city").value = values.city; 
... 
} 

2) Verwenden Sie driver.executeScript(), um einen Skriptknoten in den Kopfknoten einzufügen, und rufen Sie die Funktion auf.

var script = 'var script = document.createElement("script");' + 
'script.src=file:///<script file absolute path>; ' + 
'document.head.appendChild(script);' + 
'autofill(arguments[0])'; 

driver.executeScript(script, fieldsValue); 
+0

Sehr sehr hilfreich. Lösung für mich war, "driver.execute_script (schreiben Sie dann jeden Abfrage Selektor der Seite mit einem"; "dazwischen. Wie für die Eingabe von Werten habe ich nur% s. Gemacht es etwas schneller mit weniger Code dann Erstellen einer lokalen js Ich wusste nicht, dass Sie ";" verwenden können, um jeden Eingang zu trennen. Danke – Kermit

0

Ich bin mir nicht sicher, ob ich dich richtig verstehe.

Möchten Sie alle Elemente mit der gleichen ID mit dem gleichen Text füllen?

Sie können versuchen, es auf diese Weise zu tun:

elements = driver.find_elements_by_id('your id here') 
for element in elements: 
    element.send_keys('---') 
+0

bitte überprüfen Sie die Änderungen. Ich möchte alle Eingabetextfelder einer Website auf einmal mit unterschiedlichen Werten ausfüllen. Prost – Kermit

+0

Konnten Sie Beispiel Ihres Codes bekannt geben? – mostaszewski

Verwandte Themen