我使用的是Selenium webdriver,登录后无法与元素进行交互。这意味着在登录屏幕期间元素交互正常工作。
webdriver是HTMLUNITS。我不想使用另一个无头驱动程序,因为需要在Windows上运行此脚本,它是唯一一个允许我通过登录屏幕的脚本。已经尝试使用PhantomJS(没有工作),并尝试配置headless_chrome但没有成功。
源代码在这里: https://gist.github.com/anonymous/6edf78d63d698340b1ae53a597776037
我尝试互动的<input>
位于第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;"/>
我需要写一个值,然后按ENTER键提交form
。没有任何&#34;提交&#34; button
。
1。试过这个:
driver.find_element_by_id('ToolbarOkCode').send_keys('value')
driver.find_element_by_id('ToolbarOkCode').send_keys(Keys.ENTER)
没用。找到了该元素但是&#34; send_keys&#34;行动不起作用。
2。尝试使用Javascript填充输入字段,工作正常:
driver.execute_script("document.getElementById('ToolbarOkCode').setAttribute('value', 'SM37')")
3. 然后尝试按ENTER键,出现与以前相同的错误:
driver.find_element_by_id('ToolbarOkCode').send_keys(Keys.ENTER)
4。尝试发送submit()
事件,显然有效,但表单根本没有提交:
driver.find_element_by_id('ToolbarOkCode').submit()
TEST
也试着用这个:
driver.find_element_by_xpath("//input[@id='ToolbarOkCode']").send_keys("SM37")
driver.find_element_by_xpath("//input[@id='ToolbarOkCode']").send_keys(Keys.ENTER)
收到与以前相同的错误:
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)
有什么想法吗?
提前谢谢!
答案 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()
让我了解哪些内容适合您。