如何使用硒悬停在komoot上并展开下拉菜单?

Posted

技术标签:

【中文标题】如何使用硒悬停在komoot上并展开下拉菜单?【英文标题】:How to hover over and expand dropdown menu on komoot with selenium? 【发布时间】:2021-10-07 03:30:53 【问题描述】:

我的目标是在下拉菜单中获取一个需要单击才能使用 python selenium 显示的元素。此外,似乎在点击之前,悬停是必要的。 我试着像这样点击下拉菜单:

element = wait().until(EC.presence_of_element_located((By.CLASS_NAME, "c-topmenu c-topmenu--create c-topmenu--userbar tw-inline-flex")))
element.click()
def wait():
    return WebDriverWait(driver, 30)

并尝试使用悬停:

Hover = ActionChains(driver).move_to_element(element)
Hover.click().build().perform()

不过,我得到一个 TimeoutException 并且无法找到解决方案。

网站komoot在点击下拉菜单之前是这样的:

网站komoot展开后是这样的:

【问题讨论】:

你能显示a标签后面的事件吗?也许你可以简单地执行 javascript 而不是点击它 如果我的回答解决了您的问题,请告诉我 @Prophet 谢谢,是的。最初,我正在寻找具有唯一类名的另一个元素(我的问题的替代解决方案),我正在使用 EC.element_to_be_clickable 但它仍然不起作用。现在有了另一个元素,我忘记了独特性。感谢您指出仅定位存在是不够的。 【参考方案1】:

好的,这就是我如何让它工作。

登录后,我从链接中抓取了包装器元素:

more_menu_wrapper = driver.find_element_by_css_selector("div[data-test-id='more_menu']")

之后我可以点击所需的元素:

more_menu_wrapper.find_element_by_tag_name("a").click()

【讨论】:

【参考方案2】:

您使用了错误的定位器。 如果有多个类名,您应该使用 css_selector 或 XPath,而不是使用类名。 另外,这里你有一个独特的属性data-test-id,你应该使用它。 此外,您应该等待元素可见性或可点击性,而不仅仅是元素存在。 所以你的代码可能是:

element = wait().until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-test-id='more_menu']")))

【讨论】:

以上是关于如何使用硒悬停在komoot上并展开下拉菜单?的主要内容,如果未能解决你的问题,请参考以下文章

我如何测试使用硒在下拉菜单中按字母顺序对项目进行排序

jQuery 如何实现 “鼠标悬浮下拉菜单” 效果?

悬停“向右下拉”菜单

如何在悬停时制作 Bootstrap 的下拉菜单?

如何在悬停而不是单击时制作 Twitter Bootstrap 的“拆分按钮下拉菜单”下拉菜单?

如何在 twitter 引导下拉菜单中使用悬停图像