使用不断变化的Xpath查找元素

时间:2018-06-23 23:11:16

标签: python selenium selenium-webdriver web-scraping automation

我刚开始使用Python编写Selenium,我一直在尝试通过名称,id,xpath找到该按钮,然后单击它,但没有任何效果。

问题是,我找不到按钮,因为xpath一直在变化,ID名称只是“按钮”,以这种方式定位它也不起作用,因为页面上还有很多其他按钮。如何找到该元素?

这是HTML网站:

<ul data-componentname="gender">

  <li id="b27296be-e8da-4d5a-acb6-d1674bf88568" class="">
    <input type="button">
    <span>Male</span>
  </li>

  <li id="32bf7074-6b69-41bb-9869-cf71ac42686f" class="">
    <input type="button">
    <span>Female</span>
  </li>

这是我尝试过的:

clickGender = browser.find_element_by_xpath("b27296be-e8da-4d5a-acb6-d1674bf88568")

非常感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

根据您共享的 HTML ,以 Male Female 找到与文本相对应的动态按钮,然后单击它必须诱使 WebDriverWait 使元素可点击,并且您可以使用以下解决方案:

  • 男:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Male')]//preceding::input[1]"))).click()
    
  • 女:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Female')]//preceding::input[1]"))).click()
    

注意:您需要以下导入:

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

答案 1 :(得分:0)

您需要使用find_element_by_id

clickGender = browser.find_element_by_id("b27296be-e8da-4d5a-acb6-d1674bf88568")

答案 2 :(得分:0)

您的XPATH应该是这个(假设您要选择“男性”按钮):

//li[span/text()='Male']

答案 3 :(得分:0)

  

要查找带有包含“ Male”的文本的按钮,请使用以下命令:

driver.find_element_by_xpath("//li[contains(string(), 'Male')]/input[contains(@type,'button')]")
  

要查找带有包含“女性”的文本的按钮,请使用以下方法:

 driver.find_element_by_xpath("//li[contains(string(), 'Female')]/input[contains(@type,'button')]")