我有一个链接需要点击:
<a id="selectLink">...</a>
我这样做是这样的:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.ID, "selectLink")))
,但是由于某种原因,链接没有单击,或者没有单击,但没有任何反应。当我手动执行时,它可以工作。 我什至尝试将其放入一个循环中并单击它,直到发生某些事情为止,但是有时它会起作用,有时却不起作用:
while True:
try:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.ID, "selectLink"))).click()
except Exception:
break
我不知道是什么问题。
例如:
while True:
try:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.ID, "selectLink"))).click()
print(len(browser.find_elements_by_id("selectLink")))
print('click')
except Exception:
print(len(browser.find_elements_by_id("selectLink")))
print('break')
break
它给了我
1
click
1
click
1
break
仍然没有任何反应。我的问题是,即使长度仍为1,即使链接仍可访问,循环如何中断?
答案 0 :(得分:0)
您可以尝试以下方法:
button = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "text between anchor tags")))
button.click()
答案 1 :(得分:0)
我认为您已经很接近了。让我们看看出了什么问题。
根据您的代码优先代码试用版:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.ID, "selectLink")))
在这种尝试中,您考虑了元素的ID
属性,其中元素是<a>
标记。通常,当您需要与<a>
标记进行交互时,最好利用<a>
标记内的 linkText 来帮助您。
根据您的代码第二次代码试用:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.ID, "aaaa.Isu_Recherche_de_prmAvanceView.Button_Selectionner"))).click()
在这种尝试中,您认为的ID
属性与HTML元素的ID
不匹配。
因此您会看到错误。
根据您共享的HTML来单击所需的元素,您需要诱导该元素使 WebDriverWait 成为可点击的,并且可以使用以下任一解决方案:< / p>
LINK_TEXT
:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.LINK_TEXT, "Sélectionner"))).click()
PARTIAL_LINK_TEXT
:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Sélectionner"))).click()
CSS_SELECTOR
:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.urBtnCntTxt"))).click()
XPATH
:
WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='urBtnCntTxt'][contains(.,'Sélectionner')]"))).click()
注意:
您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
使用CSS_SELECTOR
或XPATH
时,最好在 class , id 或其他
答案 2 :(得分:0)
如果我猜到了,那可能是时间问题。如果单击该链接,则该链接仍然存在于页面上,因为定位符相同。如果您改为单击链接,请等待该元素过时(表明该页面正在重新加载),然后等待其可单击(指示该页面已完成重新加载),然后再次单击它...该循环可能会起作用
wait = WebDriverWait(browser, timeout)
while driver.find_elements_by_id("selectLink")
link = wait.until(EC.element_to_be_clickable((By.ID, "selectLink")))
link.click()
wait.until(EC.staleness_of(link))