我正在尝试将数字发送到仅接受数字值的元素(文本框)。该元素如下:
目前,我有这段代码(本段下的代码)用于在元素中输入数字。谁能告诉我为什么号码不显示?任何帮助将不胜感激。
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>
你可以简单地做,
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")
<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
就我而言,我正在开发 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)