【问题标题】:Clearing a html input box using selenium使用 selenium 清除 html 输入框
【发布时间】: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()

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案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);
          

          【讨论】:

            猜你喜欢
            • 2013-06-21
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 2010-12-14
            • 1970-01-01
            • 2017-09-12
            • 2020-04-25
            相关资源
            最近更新 更多