使用 selenium 清除 html 输入框

Posted

技术标签:

【中文标题】使用 selenium 清除 html 输入框【英文标题】:Clearing a html input box using selenium 【发布时间】:2020-02-21 22:53:45 【问题描述】:

我确实正在尝试清除输入,但 clear() 函数不起作用。关于如何清除输入框的任何想法?

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.indeed.com")
#this is not clearning the input
elem2 = driver.find_element_by_id("text-input-where").clear()

【问题讨论】:

【参考方案1】:

您没有使用等待也是一个问题。

所以首先使用等待,正如@Sers 所说,使用 javascript 执行器

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

    driver = webdriver.Chrome()
    driver.get("https://www.indeed.com")

    WebDriverWait(browser, 60).until(EC.visibility_of_element_located((By.ID, 'text-input-where')))

    elem2 = driver.find_element_by_id("text-input-where")

    driver.execute_script('arguments[0].value = "";', elem2)

以下为我工作的 Java 代码:

WebDriver driver = new ChromeDriver();
driver.get("https://www.indeed.com");
WebDriverWait waiter = new WebDriverWait(driver, 60);
waiter.until(ExpectedConditions.visibilityOfElementLocated(By.id("text-input-where")));
WebElement element = driver.findElement(By.id("text-input-where"));

((JavascriptExecutor) driver).executeScript("arguments[0].value ='';", element);

【讨论】:

【参考方案2】:

使用 JavaScript 将值设置为空字符串:

driver.execute_script('arguments[0].value = "";', driver.find_element_by_id("text-input-where"))

【讨论】:

【参考方案3】:

您也可以尝试发送退格键:

def clear_text(element):
    length = len(element.get_attribute('value'))
    element.send_keys(length * Keys.BACKSPACE)

【讨论】:

【参考方案4】:

我想指出的第一件事是你正在使用

elem2 = driver.find_element_by_id("text-input-where").clear()

clear() – 清除任何文本类型元素的值。它不允许任何参数,它的返回类型是void。所以elem2 将为空。

其次,我们可以根据被测应用程序使用多种方法。

有时,如果没有先点击元素,driver.find_element_by_id("text-input-where").clear() 不起作用。所以我们可以做到,

driver.find_element_by_id("text-input-where").click();
driver.find_element_by_id("text-input-where").clear();
driver.find_element_by_id("text-input-where").sendKeys(textContent);

或者我们也可以使用 Actions 类和 Webdriver 等待。

elem2 = WebDriverWait(browser, 60).until(EC.visibility_of_element_located((By.ID, 'text-input-where')))
webdriver.ActionChains(driver).move_to_element(elem2).click(elem2).perform()
elem2.clear();

或者正如answer 中提到的,我们可以模拟 CTRL + A 和 DEL 键。

driver.find_element_by_id("text-input-where").click();
driver.find_element_by_id("text-input-where").send_keys(Keys.CONTROL + "a");
driver.find_element_by_id("text-input-where").send_keys(Keys.DELETE);

【讨论】:

以上是关于使用 selenium 清除 html 输入框的主要内容,如果未能解决你的问题,请参考以下文章

Python Selenium.WebDriverWait 清除输入框再输入『详解』

Selenium-几种操作

利用selenium自动化实现搜索框输入内容

Selenium向iframe富文本框输入内容

selenium自动化常用方法

selenium自动化常用方法