2017-08-10 6 views
0

私はSelenium webdriverを使用しており、ログイン後に要素と対話できません。つまり、ログイン画面で要素のやりとりがうまく機能します。Pythonセレニウムは要素と対話できません

ウェブドライバはHTMLUNITSです。 Windows上でこのスクリプトを実行する必要があるため、別のヘッドレスドライバを使用したくないのです。これは、ログイン画面を通過できる唯一のドライバです。既にPhantomJSで試してみました(うまくいきませんでした)、成功しなくてもheadless_chromeを設定しようとしました。

ソースコードはここにある: https://gist.github.com/anonymous/6edf78d63d698340b1ae53a597776037

<input> Imは対話しようとすると、ソースコードからのライン209上にあること。これと同じ:

<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;"/> 

私はformを提出して入力した値とプレスを記述する必要があります。 buttonはありません。

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

は動作しませんでした:

1.はこれをしようとしました。要素が見つかりましたが、 "send_keys"アクションは機能しません。

入力フィールドを埋めるためにJavascriptを使用してみました

2.は、正常に動作します:

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

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

3.を次に以前のように、Enterキーを押し、同じエラーを試してみました4.submit()イベントを送信しようとしましたが、明らかに動作しますが、フォームはまったく送信されません。

任意のアイデア

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) 

:前と同じエラーを受け取っ

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

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

TEST

はこれでも試しましたか?

THanks in advance!

+0

これは手動で行うことができますか? –

+0

はい、手動で動作します。 –

答えて

0

次のように問題を整理するユニークxpath代わりidのを使用するための小さな微調整:二オン

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

が、次のようにsubmit()が良い仕事がありそうです考えた:

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

あなたに適したものを更新してください。

+0

あなたのアイデアに答えるために投稿を編集しました。 –

+1

@DenisSotoあなたが質問で共有したノードには、すでに属性が 'value =" SM37 "'として含まれていますが、 'send_keys(" SM37 ")'を試しています。 – DebanjanB

+0

申し訳ありません。スクリプトを実行した後にソースコードを抽出しました。そのため、 'input'は属性' value = "SM37"を持っています。 'value =" "を実行する前に –

関連する問題