我正在努力自动化与网站的某些互动(我无法访问基本代码)。我认为其中一个文本输入框正在期待一个“短”整数值。但是,我通过python / selenium做的任何事情都不会成功地将值传递给浏览器。每当我这样做时,我都会收到无效的输入错误。
我尝试了driver.send_keys()
的许多变体,其值为字符串,int,unicode字符串,长期无效。
我也试过通过javascript发送值:
driver.execute_script("document.getElementById('short_input').setAttribute('value', arguments[0])", '10')
我还尝试通过a = array('h')
和numpy.short('10')
传递“短”变量。
当我收到无效输入错误时,我可以通过单击输入框然后单击离开手动清除它。我假设这是因为然后将值重置为代码所需的短整数。
无论如何通过硒来做到这一点?当我尝试element.click()
时,它不会像手动那样清除错误。还是有另一种方法我错过了传递一个短变量?
我想要修改的值的相关HTML是:
<input id="x-auto-23-input" class="N0-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-field E1-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-text A1-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-invalid P0-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-focus" type="text" value="" style="width:142px;" tabindex="0">
我在其中看到的任何内容都暗示为什么它与普通文本输入框不同。然而,当我执行element.clear()
后跟element.send_keys(10)
,然后通过单击浏览器的“确定”按钮尝试保存更改时,我收到错误,指出它是无效条目。
答案 0 :(得分:1)
鉴于提供的HTML,它应该像
一样简单driver.find_element_by_id("x-auto-23-input").send_keys("abc")
您应该能够发送字符串,因为这是用户输入页面本身的内容。页面的内部可能会将该字符串转换为另一种数据类型,但该页面将为您完成这项工作......您不必担心这一点。
你试过这个吗?结果是什么?答案 1 :(得分:1)
您尝试使用JavaScript设置值无效。这就是你所拥有的(重新格式化以避免超长线):
driver.execute_script("document.getElementById('short_input')"
".setAttribute('value', arguments[0])", '10')
这样做是设置input
元素的属性,这是完全没用的。在创建input
时使用该属性,然后它不再用于其他目的。您需要更改的是input
元素的属性:
driver.execute_script(
"document.getElementById('short_input').value = arguments[0]", '10')
您过去可能使用过element.set_attribute("value", whatever)
,但这是有效的,因为Selenium会静默更改属性而不是值。
所以我们知道为什么尝试不起作用。现在,为什么使用.send_keys()
并不适合你,这是一个谜。我刚试过自己创建的页面。我从来没有尝试过将一个数字传递给它,但刚才我尝试了它并让Selenium将输入字段设置为值10。