【问题标题】:selenium.common.exceptions.NoSuchElementException error sending text to input fields using Selenium and Pythonselenium.common.exceptions.NoSuchElementException 使用 Selenium 和 Python 将文本发送到输入字段时出错
【发布时间】:2022-01-23 00:09:15
【问题描述】:

我正在尝试编写一个简单的程序来填写要提交的表单(包括订单 ID 和邮政编码),但我不断收到以下错误:

selenium.common.exceptions.NoSuchElementException: Message: "  (without any text following "Message

代码试验:

from selenium import webdriver
browser = webdriver.Safari()
browser.get('https://knowledge.tonal.com/s/order-status')

orderElm = browser.find_element_by_id('input-3')
orderElm.send_keys('1000XXX')

zipcodeElm = browser.find_element_by_id('input-4')
zipcodeElm.send_keys('90210')
zipcodeElm.submit()

我已经多次仔细检查了我的元素 ID,虽然我对此很陌生,但我相当有信心我拥有正确的元素 ID。我做错了什么?

【问题讨论】:

    标签: python html selenium xpath webdriverwait


    【解决方案1】:

    要将字符序列发送到您需要为element_to_be_clickable() 诱导WebDriverWait 的元素,您可以使用以下任一Locator Strategies

    • 使用XPATH

      driver.get("https://knowledge.tonal.com/s/order-status")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-aura-class='cOrderSearch']//following::input[1]"))).send_keys('1000XXX')
      driver.find_element(By.XPATH, "//div[@data-aura-class='cOrderSearch']//following::input[2]").send_keys("90210")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    • 浏览器快照:

    【讨论】:

    • 优秀!感谢您添加的上下文。这效果很好!
    【解决方案2】:

    这里有多个问题: A. 获取 url 后,您并没有等待页面中的元素完全加载,因此找不到元素 B. 你的定位器对我来说似乎是动态的,例如:input-3,我认为它是input-5(虽然我在 Chrome 浏览器上,但这可能不排除定位器是动态的)。因此,我重构并寻找了一些我粘贴在下面的静态定位器策略。 C. zipcodeElm.submit() 不起作用,因为它不是按钮元素。我也重构了这个。 所以,这里是代码。

    driver.get('https://knowledge.tonal.com/s/order-status')
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "(//div[@data-aura-class='cOrderSearch']//input)[1]")))
    orderElm = driver.find_element(By.XPATH, "(//div[@data-aura-class='cOrderSearch']//input)[1]")
    orderElm.send_keys('1000XXX')
    zipcodeElm = driver.find_element(By.XPATH, "(//div[@data-aura-class='cOrderSearch']//input)[2]")
    zipcodeElm.send_keys('90210')
    driver.find_element(By.XPATH, "//*[@data-aura-class='cOrderSearch']//parent::div//button").click()
    

    输出:(退出代码0表示代码没有错误通过)

    Process finished with exit code 0
    

    【讨论】:

    • 嗯...不。打印同样的错误。
    • @Mfrazz,这是我的初步印象。但现在我已经给出了详细的答案。请检查。它现在应该可以工作了。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2021-07-03
    • 2015-02-04
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多