python - 如何处理冒号(:) in the name when using Selenium in Python

标签 python selenium xpath css-selectors nosuchelementexception

我正在尝试在网页中搜索数字 ( https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces )。

我知道输入元素的名称是:“vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit”,但是当我尝试查找该元素时出现此错误:

"NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"[name="vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit"]"}
  (Session info: chrome=81.0.4044.138)"

这是我试过的:

from selenium import webdriver
driver = webdriver.Chrome("C:\\Users\\jcherrerab\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
driver.get("https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces")
driver.find_element_by_name("vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit").send_keys("860003020")

你能帮帮我吗?

最佳答案

<input>名称 属性元素包含 : 中的字符:

vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit

: 中使用时具有特殊效果.因此,您的程序无法找到所需的元素并引发 NoSuchElementException


解决方案

要查找元素,您可以使用以下任一项 Locator Strategies :

  • 使用 css_selector :

    driver.find_element_by_css_selector("input[name='vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit']")
    
  • 使用 xpath :

    driver.find_element_by_xpath("//input[@name='vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit']")
    

最佳实践

当您调用 send_keys() 时理想情况下,您需要诱导 WebDriverWait对于 element_to_be_clickable()您可以使用以下任一项 Locator Strategies :

  • 使用 CSS_SELECTOR :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit']"))).send_keys("860003020")
    
  • 使用 XPATH :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit']"))).send_keys("860003020")
    
  • 注意:您必须添加以下导入:

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

muisca


引用

您可以在以下位置找到一些相关讨论:

关于python - 如何处理冒号(:) in the name when using Selenium in Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62125349/

相关文章:

python - 使用 Python 循环除某些值外

python - 为什么 matplotlib 在 VSCode 上不起作用

python - 装饰时保留argspec?

javascript - Selenium 服务器已启动并正在运行,但无法连接到 selenium

Python Windows 身份验证用户名和密码不起作用

xml - 使用xslt在父节点下查找所有唯一的xml first节点

python - 如何用python模拟桌面在(x,y)位置的点击?

Python从字符串中删除空格将其转换为int

xml - XPath、XQuery 和 XPointer 之间的区别

xml - XPath 查询(带有一些简单的正则表达式限制)