2017-08-10 1 views
0

Ich benutze Selenium Webdriver und kann nicht mit einem Element nach dem Login interagieren. Das bedeutet, dass die Element-Interaktionen während des Anmeldebildschirms gut funktionieren.Python Selen kann nicht mit Element interagieren

Der Webtreiber ist HTMLUNITS. Ich möchte keinen anderen Headless-Treiber verwenden, da dieses Skript unter Windows ausgeführt werden muss. Es ist das einzige, mit dem ich den Anmeldebildschirm durchgehen kann. Bereits mit PhantomJS versucht (hat nicht funktioniert), und versucht, Headless_Chrome ohne Erfolg zu konfigurieren.

Der Quellcode ist hier: https://gist.github.com/anonymous/6edf78d63d698340b1ae53a597776037

Die <input>, dass Im ist auf der Leitung 209 aus dem Quellcode zu interagieren möchten. Gleiche als das:

<input id="ToolbarOkCode" ct="I" lsdata="{0:'ToolbarOkCode',1:'Command',4:200,13:'150px',23:true}" lsevents="{Change:[{ClientAction:'none'},{type:'TOOLBARINPUTFIELD'}],Enter:[{ClientAction:'submit',PrepareScript:'return\x20its.XControlSubmit\x28\x29\x3b',ResponseData:'delta',TransportMethod:'partial'},{Submit:'X',type:'TOOLBARINPUTFIELD'}]}" type="text" maxlength="200" tabindex="0" ti="0" title="Command" class="urEdf2TxtRadius urEdf2TxtEnbl urEdfVAlign" value="SM37" autocomplete="on" autocorrect="off" name="ToolbarOkCode" style="width:150px;"/> 

Ich brauche einen Wert zu schreiben, und drücken Sie die Eingabetaste die form einzureichen. Es gibt kein "Senden" button.

1. dies versucht:

driver.find_element_by_id('ToolbarOkCode').send_keys('value') 
driver.find_element_by_id('ToolbarOkCode').send_keys(Keys.ENTER) 

nicht funktioniert. Das Element wurde gefunden, aber die Aktion "send_keys" funktioniert nicht.

2. Javascript Versuchte mit dem Eingabefeld zu füllen, funktioniert gut:

driver.execute_script("document.getElementById('ToolbarOkCode').setAttribute('value', 'SM37')") 

3. dann als selben Fehler zu drücken versucht ENTER, vor:

driver.find_element_by_id('ToolbarOkCode').send_keys(Keys.ENTER) 

4. Versucht, ein submit() Ereignis zu senden, funktioniert anscheinend, aber das Formular wird überhaupt nicht übermittelt:

driver.find_element_by_id('ToolbarOkCode').submit() 

TEST

auch mit diesem Versuchte:

driver.find_element_by_xpath("//input[@id='ToolbarOkCode']").send_keys("SM37") 
driver.find_element_by_xpath("//input[@id='ToolbarOkCode']").send_keys(Keys.ENTER) 

gleichen Fehler empfangen wie zuvor:

12:12:11.233 INFO - Executing: [find element: By.xpath: //input[@id='ToolbarOkCode']]) 
12:12:11.432 INFO - Done: [find element: By.xpath: //input[@id='ToolbarOkCode']] 
12:12:11.444 INFO - Executing: [send keys: 5 <input id="ToolbarOkCode" ct="I" lsdata="{0:'ToolbarOkCode',1:'Command',4:200,13:'150px',23:true}" lsevents="{Change:[{ClientAction:'none'},{type:'TOOLBARINPUTFIELD'}],Enter:[{ClientAction:'submit',PrepareScript:'return\x20its.XControlSubmit\x28\x29\x3b',ResponseData:'delta',TransportMethod:'partial'},{Submit:'X',type:'TOOLBARINPUTFIELD'}]}" type="text" maxlength="200" tabindex="0" ti="0" title="Command" class="urEdf2TxtRadius urEdf2TxtEnbl urEdfVAlign" value="" autocomplete="on" autocorrect="off" name="ToolbarOkCode" style="width:150px;" />, [S, M, 3, 7]]) 
12:12:12.718 WARN - Exception thrown======= EXCEPTION START ======== 
EcmaError: lineNumber=[1] column=[0] lineSource=[ function (oDomEvent) {] name=[TypeError] sourceName=[http://sapmig03.cge.cl:8010/sap/public/icmandir/its/ls/js/lightspeed.js?600#3(eval)] message=[TypeError: Cannot call method "setOpenerRef" of null (http://sapmig03.cge.cl:8010/sap/public/icmandir/its/ls/js/lightspeed.js?600#3(eval)#1)]com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "setOpenerRef" of null (http://sapmig03.cge.cl:8010/sap/public/icmandir/its/ls/js/lightspeed.js?600#3(eval)#1) 

Jede Idee?

Vielen Dank im voraus!

+0

und können Sie es manuell tun? –

+0

Ja, es funktioniert manuell. –

Antwort

0

Eine kleine zwicken eine einzigartige xpath statt id aussortieren kann das Problem wie folgt zu verwenden:

driver.find_element_by_xpath("//button[@id='ToolbarOkCode']").send_keys("value") 
driver.find_element_by_xpath("//button[@id='ToolbarOkCode']").send_keys(Keys.ENTER) 

dachte Auf einer zweiten es submit() besser wie folgt kann funktionieren scheint:

driver.find_element_by_xpath("//button[@id='ToolbarOkCode']").send_keys("value") 
driver.find_element_by_xpath("//button[@id='ToolbarOkCode']").submit() 

Halten Sie mich auf dem Laufenden, was für Sie funktioniert.

+0

Ich habe den Beitrag bearbeitet, um Ihre Idee zu beantworten. –

+1

@DenisSoto Der Knoten, den Sie in der Frage geteilt haben, enthält bereits ein Attribut als 'value =" SM37 "' aber wir versuchen wieder 'send_keys (" SM37 ")', fehlt uns hier etwas? – DebanjanB

+0

Entschuldigung. Ich habe den Quellcode extrahiert, nachdem meine Skripte ausgeführt wurden. Deshalb hat die 'input' das Attribut' value = "SM37" '. Bevor Sie den 'value =" "' –

Verwandte Themen