我正在尝试在网页中选择以下元素。
.active > b:nth-child(1)
这是我的代码:
timbro = browser.find_element_by_css_selector('.active > b:nth-child(1)')
hover = ActionChains(browser).move_to_element(timbro)
hover.perform()
这是我得到的错误的一部分:
消息:无法找到元素:{“方法”:“ css选择器”,“选择器”:“。active> b:nth-child(1)”}“
我想做的是激活一个下拉菜单,以便我可以单击另一个链接。
HTML片段:
<li>
<a href="#nogo" class="main-link active"><b>Menu iniziale</b></a>
<ul style="display: block;" class="sub-links">
<li>
<a href="#nogo" onclick="Esegui('anagrafica.php')">Anagrafica</a>
</li>
<li>
<a href="#nogo" onclick="Esegui('logout.php')">Fine sessione</a>
</li>
<li>
<a href="#nogo" onclick="Esegui('main.php')">Home</a>
</li>
<li>
<a href="#nogo" onclick="Esegui('timbraWFA.php')">Timbro</a>
</li>
</ul>
</li>
您应该尝试使用WebDriverWait
,直到出现以下元素为止:-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(browser, 5)
menuIniziale = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Menu iniziale")))
hover = ActionChains(browser).move_to_element(menuIniziale).move_to_element(wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Timbro"))))
hover.click().build().perform()
Edited1:-如果不幸LINK_TEXT
不起作用,请尝试使用XPATH
以下方法:-
menuIniziale = wait.until(EC.presence_of_element_located((By.XPATH, ".//a[contains(.,'Menu iniziale')]")))
hover = ActionChains(browser).move_to_element(menuIniziale).move_to_element(wait.until(EC.presence_of_element_located((By.XPATH, ".//a[contains(.,'Timbro')]"))))
hover.click().build().perform()
或者尝试CSS_SELECTOR
如下使用:-
menuIniziale = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.main-link")))
hover = ActionChains(browser).move_to_element(menuIniziale).move_to_element(wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ul.sub-links > li:nth-child(4)"))))
hover.click().build().perform()
Edited2:如果此元素在内iframe
,则需要iframe
在查找元素之前进行如下切换:-
wait.until(EC.frame_to_be_available_and_switch_to_it(("frame name or id")))
#Now after successfully switching to frame do any one of the above steps
Edited3:-如果现在可以打开菜单但不能选择子菜单,请尝试如下操作:-
wait.until(EC.frame_to_be_available_and_switch_to_it(("frame name or id")))
menuIniziale = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.main-link")))
hover = ActionChains(browser).move_to_element(menuIniziale)
hover.build().perform()
subMenu = wait.until(EC.visibility_of_element_located((By.XPATH, ".//a[contains(.,'Timbro')]")))
subMenu.click()
编辑4:最终代码
menuIniziale = wait.until(EC.presence_of_element_located((By.XPATH, ".//a[contains(.,'Menu iniziale')]")))
hover = ActionChains(browser).move_to_element(menuIniziale)
hover.perform()
subMenu = wait.until(EC.visibility_of_element_located((By.XPATH, ".//a[contains(.,'Timbro')]")))
subMenu.click()
hover = ActionChains(browser).move_to_element(subMenu)
hover.click().perform()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句