Selenium和send_keys出错

时间:2018-04-05 17:16:48

标签: python selenium selenium-chromedriver

我想用“名字”填充输入

driver.get("https://www.supremenewyork.com/checkout")
driver.find_element_by_id("order_billing_name").send_keys("Name")

出现此错误:

Message: unknown error: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'.

这是元素<input first_and_last="true" placeholder="full name" class="string required" type="text" name="order[billing_name]" id="order_billing_name">

这是错误:

Traceback (most recent call last):
  File "C:/Users/PC/Desktop/Bot supreme/test.py", line 19, in <module>
    driver.find_element_by_id("order_billing_name").send_keys("xdd")
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 351, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 955, in find_element
    'value': value})['value']
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'.
  (Session info: chrome=65.0.3325.181)
  (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 10.0.16299 x86_64)

2 个答案:

答案 0 :(得分:0)

我刚刚注意到,当我打开您提供的网址时,该网站会自动重定向到其他网页。 (可能是因为您没有登录或购物车中没有商品。)

如果是这种情况,那么您要查找的元素不在新页面中。

答案 1 :(得分:0)

我记得在Selenium的较旧版本中发生此错误。

请运行此更新您的Selenium并尝试再次运行测试:

pip install -U selenium

如果您需要更多帮助来更新 Selenium ,请使用This了解有关如何安装软件包的详情。

<强>更新

以下是使用 WebDriverWait 的一个有用的例子:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver.get("https://www.supremenewyork.com/checkout")
WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='order_billing_name']")))
nameField = driver.find_element_by_xpath("//*[@id='order_billing_name']")
nameField.send_keys("Name")

有关WebDriverWait如何运作的详细信息,请使用: