【问题标题】:selenium webdriver unable to find element from its xpath even though the xpath is correct即使 xpath 正确,selenium webdriver 也无法从其 xpath 中找到元素
【发布时间】:2021-11-23 19:49:31
【问题描述】:

我正在尝试使用 selenium webdriver 并使用 xpath 作为定位器来获取标签的属性。我将 xpath 给了驱动程序,它返回了NoSuchElementException,但是当我在“检查元素”窗口中输入 xpath 时,它显示了特定的标签,这意味着定位器确实存在。那么硒有什么问题呢?即使我给出完整的 xpath,它仍然是一样的

from selenium import webdriver

driver = webdriver.Chrome('D:\\chromedriver.exe')
driver.get('https://cq-portal.webomates.com/#/login')


element=driver.find_element_by_xpath("//button[@type='button']")
print(element.get_attribute('class'))

driver.quit()

硒版本 = 3.141.0

【问题讨论】:

    标签: python-3.x selenium-webdriver xpath


    【解决方案1】:

    您只需要等待加载页面。您的代码非常好。要么给硬编码等待,如睡眠或元素的存在。两者都可以。

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    driver = webdriver.Chrome(PATH)
    driver.maximize_window()
    wait = WebDriverWait(driver, 20)
    
    driver.get('https://cq-portal.webomates.com/#/login')
    
    wait.until(EC.presence_of_element_located((By.XPATH, "//button[@type='button']")))
    
    element = driver.find_element(By.XPATH, "//button[@type='button']")
    print(element.get_attribute('class'))
    
    driver.quit()
    

    输出:

    btn btn-md btn-primary btn-block

    【讨论】:

      【解决方案2】:

      循环就像您错过了延迟。 请试试这个:

      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium import webdriver
      
      driver = webdriver.Chrome('D:\\chromedriver.exe')
      wait = WebDriverWait(driver, 20)
      
      driver.get('https://cq-portal.webomates.com/#/login')
      
      wait.until(EC.visibility_of_element_located((By.XPATH, "//button[@type='button']")))
      
      element=driver.find_element_by_xpath("//button[@type='button']")
      print(element.get_attribute('class'))
      
      driver.quit()
      

      【讨论】:

      • 我尝试运行这段代码,但这次我得到一个带有奇怪回溯的 TimeoutException 错误
      • @BibekjitSingh 你是对的。上面的代码不起作用,因为按钮最初处于禁用状态,在这里,我们正在检查“visibility_of_element_located”。这就是为什么,你得到了奇怪的堆栈跟踪超时异常。
      • @QualityMatters 不错,伙计!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2013-01-21
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多