【问题标题】:Unable to locate element with xpath using python and selenium无法使用 python 和 selenium 使用 xpath 定位元素
【发布时间】:2021-01-27 16:31:11
【问题描述】:

您好,我正在尝试访问 selenium 中的一个元素,当我检查元素时看起来像这样:

<div class="im_message_outer_wrap hasselect" ng-click="toggleMessage(historyMessage.mid, $event)" data-msg-id="5973">

我尝试使用它的 xpath 来查找元素,如下所示:

element = driver.find_element_by_xpath("//div[@class = 'im_message_outer_wrap hasselect'][@data-msg-id='5967']")

这会一直返回一个错误,说无法找到元素。我做错了什么或者有更好的方法来访问这个元素。 data-msg-ID 很重要,因为在代码中我希望能够遍历 id 以按顺序获取每个元素。

【问题讨论】:

    标签: python selenium-webdriver xpath css-selectors webdriverwait


    【解决方案1】:

    要定位元素,您可以使用以下任一Locator Strategies

    • 使用css_selector

      element = driver.find_element(By.CSS_SELECTOR, "div.im_message_outer_wrap.hasselect[ng-click^='toggleMessage']")
      
    • 使用xpath

      element = driver.find_element(By.XPATH, "//div[@class='im_message_outer_wrap hasselect' and starts-with(@ng-click, 'toggleMessage')]")
      

    理想情况下,要定位 clickable 元素,您需要将WebDriverWait 诱导为element_to_be_clickable(),您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.im_message_outer_wrap.hasselect[ng-click^='toggleMessage']")))
      
    • 使用XPATH:

      element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='im_message_outer_wrap hasselect' and starts-with(@ng-click, 'toggleMessage')]")))
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多