【发布时间】:2018-04-23 19:00:52
【问题描述】:
我正在尝试在网页中查找文本“分支选择”以单击它。
所以我这样做:
driver.find_elements_by_xpath("//*[contains(text(), 'Branch Selection')]").click()
它不会引发错误,但不会发生点击。我究竟做错了什么?
【问题讨论】:
标签: python selenium selenium-webdriver xpath css-selectors
我正在尝试在网页中查找文本“分支选择”以单击它。
所以我这样做:
driver.find_elements_by_xpath("//*[contains(text(), 'Branch Selection')]").click()
它不会引发错误,但不会发生点击。我究竟做错了什么?
【问题讨论】:
标签: python selenium selenium-webdriver xpath css-selectors
如果它点击但没有任何反应,请先尝试添加一个像sleep(5) 这样的睡眠来帮助调试,然后再点击看看是否是因为 Selenium 认为页面加载时实际上没有完成加载。如果您可以在睡眠 5 秒后单击,那么您需要使用 WebDriverWait 和 EC,如 @DebanjanB 所示。在最坏的情况下,您必须在代码中使用睡眠,但要尽量缩短睡眠时间。
否则,页面上可能会有多个带有Branch Selection 文本的元素,例如在元标记中。尝试使用下面的 XPATH 示例来隔离 XPATH 查找:
"//button[.//*[contains(text(), 'Branch Selection')]]"
或者如果页面上有多个包含该文本的短语,请使用以下选择确切的文本
"//button[.//*[text()='Branch Selection']"
这将选择具有您要查找的文本的子元素的按钮元素。更多 XPATH 细节在这里:https://devhints.io/xpath
【讨论】:
根据提供的 HTML 以单击文本为 Branch Selection 的元素,您需要诱导 WebDriverWait 以使元素可单击,如下所示:
CSS_SELECTOR:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.item.item-block.item-md div.input-wrapper>ion-label.label.label-md[id^=lbl-]"))).click()
XPATH:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='item item-block item-md']//div[@class='input-wrapper']/ion-label[@class='label label-md' and starts-with(@id,'lbl-') and contains(.,'Branch Selection')]"))).click()
【讨论】:
xpath 可能不是唯一,我们可能需要更多的 outerHTML