如何使用 Selenium Python 将键发送到 type = number 的元素?

问题描述 投票:0回答:3

我正在尝试将数字发送到仅接受数字值的元素(文本框)。该元素如下:

目前,我有这段代码(本段下的代码)用于在元素中输入数字。谁能告诉我为什么号码不显示?任何帮助将不胜感激。

bpm = 121
inputBpm = driver.find_element(By.XPATH, "/html/body/mp-root/div/ ... /div[3]/div/input")
inputBpm.clear()
inputBpm.send_keys(str(bpm))

编辑: 这是我尝试输入的内容的视觉效果(清除后)

这是周围的元素:

<div _ngcontent-soo-c572="" class="track-bpm">
<label _ngcontent-soo-c572="" class="input-title">BPM</label>
<span _ngcontent-soo-c572="" class="input-title-info">(Beats per minute)</span>
<div _ngcontent-soo-c572="" class="input-text">
<input _ngcontent-soo-c572="" type="number" name="bpm" placeholder="0" min="0" max="999" step="0.01" class="ng-pristine ng-valid ng-touched"></div>
</div>
python selenium selenium-webdriver webdriverwait sendkeys
3个回答
1
投票

你可以简单地做,

if inputBpm.get_attribute("type")  == "number":
    inputBpm.clear()
    inputBpm.send_keys(str(bpm))

或者您可以使用 XPATH 通过

type = number
找到该输入标签。

input_tag = driver.find_element(By.XPATH, "//input[contains(@type, 'number')]")
inputBpm.clear()
input_tag.send_keys("9023")

0
投票

<input>
元素具有属性
type="number"
min="0"
max="999"

<input _ngcontent-pxo-c572="" type="number" name="bpm" placeholder="0" min="0" max="999" step="0.01" class="ng-valid ng-touched ng-dirty">

解决方案

要将 字符序列 发送到元素,您需要为 element_to_be_clickable() 引发 WebDriverWait,并且您可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

    bpm = 121
    my_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-valid.ng-touched.ng-dirty[name='bpm']")))
    my_element.click()
    my_element.clear()
    my_element.send_keys(str(bpm))
    
  • 使用XPATH

    bpm = 121
    my_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-valid ng-touched ng-dirty' and @name='bpm']")))
    my_element.click()
    my_element.clear()
    my_element.send_keys(str(bpm))
    
  • 注意:您必须添加以下导入:

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

0
投票

就我而言,我正在开发 chromedriver。我有一张带有

input= number
的表格。不可能
send_keys
,什么也不会发生。

我尝试过

driver.execute_script(f"arguments[0].value = '{text}';", element)
。 此解决方案写入了数字,但表单无法识别它。

我还尝试了另一种替代方案

pyautogui.typewrite(text)
,但它产生的结果与之前的解决方案相同。 所以我需要执行真正的键盘触摸,而不是通过 selenium 模拟键盘触摸。

很抱歉,必须安装 2 个库:

pynput
(需要
evdev
) 起初,pip install 不起作用,所以我不得不执行以下命令:

sudo apt-get install build-essential
pip install evdev
pip install pynput

解决方案总览:

    from pynput.keyboard import Key, Controller
    text = "my text"
    xpath = "//my//xpath"
    self.wait.until(EC.element_to_be_clickable((By.XPATH, xpath))).click()
    keyboard = Controller()
    for char in text:
        keyboard.press(char)
        keyboard.release(char)
© www.soinside.com 2019 - 2024. All rights reserved.