使用 selenium 在文本字段中设置值。 selenium.common.exceptions.NoSuchElementException:消息:无法定位元素:

Setting a value in a text field using selenium. selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:

我是网络抓取的新手 python。我的任务是使用 selenium 为提及项 URL 设置文本框名称“rcdate”的值。然后抓取过滤后的值。当它是 运行 时,它给出了这个异常。这是我尝试 运行

的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 


browser = webdriver.Firefox()
browser.get("http://www.irrigation.gov.lk/index.php?option=com_reservoirdata&Itemid=255&lang=en")

wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, 'rcdate')))

browser.find_element_by_tag_name("rcdate").send_keys("2018-10-01")

那么错误信息是

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: rcdate

Html

<input type="text" name="rcdate" id="rcdate" value="2018-10-11">

我在尝试访问 url http://www.irrigation.gov.lk/index.php?option=com_reservoirdata&Itemid=255&lang=en

时收到 ERROR 403 - FORBIDDEN

但是,一旦您找到元素并在尝试调用 send_keys() 方法时继续前进,因此您应该使用 而不是 expected_conditions 作为 presence_of_element_located() element_to_be_clickable()如下:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#rcdate"))).send_keys("2018-10-01")
    
  • ID:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "rcdate"))).send_keys("2018-10-01")
    

使用

find_element_by_name() # locate element by the "name" attribute

不要与

混淆
find_element_by_tag_name() # locate element by the element tag ("input" in this case)

你在这一行做错了,所以 使用这条线,

browser.find_element_by_tag_name("rcdate").send_keys("2018-10-01")

没有意义,因为不存在这样的标签,而您使用的是标签名称 "rcdate"、

使用其中之一,

browser.find_element_by_id("rcdate").send_keys("2018-10-01")
browser.find_element_by_name("rcdate").send_keys("2018-10-01")

希望对您有所帮助,

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 


browser = webdriver.Firefox()
browser.get("http://www.irrigation.gov.lk/index.php?option=com_reservoirdata&Itemid=255&lang=en")

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#rcdate"))).send_keys("2018-10-01")