selenium.common.exceptions.NoSuchElementException 使用 Selenium 和 Python 将文本发送到输入字段时出错

selenium.common.exceptions.NoSuchElementException error sending text to input fields using Selenium and Python

我正在尝试编写一个简单的程序来填写要提交的表格(包括订单 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。我做错了什么?

这里有多个问题: 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

发送一个字符序列到你需要归纳的元素WebDriverWait for the and you can use either of the following :

  • 使用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
    
  • 浏览器快照: