在Python中使用Selenium输入货币格式的文本

时间:2019-01-10 00:49:15

标签: python selenium xpath css-selectors webdriverwait

试图在Python中使用Selenium将值“ 100000”输入到Web表单中,但是无论我尝试如何发送它,始终无法正常工作。

很抱歉,我对术语缺乏了解。我会尽力而为,但我是自学成才的新手。另外,我很抱歉,但是我不能告诉您该网站,否则我的雇主不会很高兴。

网页上的框会自动填充一个美元符号。我知道网络表单中的框期望使用货币格式的整数。 当我查看网页上的html元素时,它提供了以下信息

<input type="number" step="1" name="moneying" size="35" id="moneying" 
class="moneying input currency error" value="" data-type="currency" data- 
mandopt="mand" required="" pattern="[\$]?[0-9]+[\.]?[0-9]*" min="500" 
onblur="validate(this);">

我尝试过:

  • 简单地使用send_keys类,没有任何变化
  • 在使用send_keys之前单击框
  • 在使用send_keys之前清除该框
  • 等待直到元素可以在页面上找到,然后执行以上所有操作
  • 将send_keys与Keys.NUMPAD#一起使用
  • 在数字的开头添加$
  • 在数字的开头加上\ $
  • 使用Firefox驱动程序代替Chrome驱动程序
  • 输入值100000.00和100000

我的代码的当前版本:

    from selenium import webdriver
    driver = webdriver.Chrome('location on my pc')
    try:
        driver.get(r"relevant web page")
        moneying_box_wait = WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,"moneying")))
        moneying_box = driver.find_element_by_id("moneying")
        moneying_box.click()
        moneying_box.clear()
        moneying_box.send_keys("100000")

我希望它在框中输入100000。框中什么也没有显示。

1 个答案:

答案 0 :(得分:2)

如果要发送字符序列而不是presence_of_element_located,则需要使用element_to_be_clickable,并且可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.moneying.input.currency.error#moneying"))).send_keys("$1000.0")
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='moneying input currency error' and @id='moneying']"))).send_keys("$1000.0")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC