我刚开始使用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")
非常感谢您的帮助。
答案 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')]")