我有一个将值写入网页的脚本,除了一个字段不断抛出以下错误外,所有值都写入:x1c 0d1x(截图提供B/c在其他类似的问题,许多评论说,这是不可能发生在网页上。)“请输入一个数值。”
下面是我的代码:
workcenter_to_add = {}
workcenter_to_add['BatchCycle'] = str(2.78)
# driver = my_chrome_webpage
WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, "//input[@id='BatchSize']"))).send_keys(workcenter_to_add['BatchCycle'])
大家都知道,如果我不把2.78
值作为string
输入,WebDriver
就会抛出错误。但是我的页面需要一个数字值。我被卡住了。
我在谷歌上搜索了一下,没有找到一个有用的答案。如果你使用Java
,似乎有一个setAttribute
方法可以使用,但如果你使用Python
,你必须找出一些东西。
例如,问题here看起来很有希望,但我找不到String
,也找不到如何导入它来使它工作。还有其他几个更老的问题讨论执行java
,但我没有运气让它们工作。
这里有页面源代码HTML:https://drive.google.com/open?id=1xRNPfc5E65dbif_44BQ_z_4fMYVJNPcs
4条答案
按热度按时间pdtvr36n1#
我敢肯定,虽然您传递的是值
.send_keys('2.78')
,但该值仍将是数字。因此,理想情况下,您不应遇到此问题。下面是示例html和脚本来确认相同。
要检查的脚本:
**屏幕截图:**x1c 0d1x
因此,我们必须检查js/方法实现了什么来验证字段中输入的值。正如你所看到的,从python脚本中传递带引号的整数对字段及其数据类型没有任何影响。
pcrecxhr2#
我肯定这是一个不受欢迎的答案,但这是我如何得到它的工作。
这个问题中的字段和同一ERP系统中另一个页面上的另一个字段抛出了相同的错误。无论我怎么尝试,
send_keys()
都不起作用。这就是我开始思考并开始尝试其他方法的时候。
我试着通过
send_keys()
将信息输入到页面上的另一个接受数字的字段中,然后将值剪切并粘贴到如果我使用send_keys()
则不接受该值的字段中。下面是我在不同页面上使用的同一问题的代码片段:
我正在寻找一个高科技的答案时,一个低科技的工作周围足够。
我会写在简历上的是代码还是方法论?可能不会。它起作用了吗?我能接受吗?是的。谢谢那些试图回答的人。
j8yoct9x3#
这看起来很像逗号和圆点的问题?
但我也可能错了。
这取决于运行Selenium的计算机的浏览器区域设置。
因此,一个简单的测试可以是在字段中输入文本“2,78”或“2.78”。
Python将数字转换为字符串,而不是本地化的数字。当它作为键发送时,它将作为四个字符“2”“.”“7”“8”发送。然后它将在浏览器的Javascript范围内结束,根据操作系统和语言设置,将使用逗号或圆点作为小数分隔符。
nfeuvbwi4#
包含通知的对话框
可能是Constraint API的
element.setCustomValidity()
方法的结果。我已经通过了你分享的page-source HTML。但是根据你的代码试验:
我没有在pagesource中找到任何
<input>
标签。基于文本的相关HTML可以帮助我们以更好的方式构建答案。但是,您需要考虑以下几点:<input>
标记时,应使用element_to_be_clickable()
而不是presence_of_element_located()
。2.78
值,WebDriver会抛出错误。不过,由于str(2.78)
是有效的,所以你可以坚持使用它。参考
您可以在以下位置找到一些关于
Constraint_validation
的相关讨论: