如何使用硒将鼠标悬停在 komoot 上并展开下拉菜单?
How to hover over and expand dropdown menu on komoot with selenium?
我的目标是使用 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展开后是这样的:
您使用了错误的定位器。
如果有多个 class 名称,您应该使用 css_selector 或 XPath,而不是 class 名称。
另外,这里你有一个独特的属性data-test-id
,你应该使用它。
此外,您应该等待元素可见性或可点击性,而不仅仅是元素存在。
所以你的代码可以是:
element = wait().until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-test-id='more_menu']")))
好的,这就是我如何让它工作的。
登录后,我从 link 中抓取了包装元素:
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()
我的目标是使用 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展开后是这样的:
您使用了错误的定位器。
如果有多个 class 名称,您应该使用 css_selector 或 XPath,而不是 class 名称。
另外,这里你有一个独特的属性data-test-id
,你应该使用它。
此外,您应该等待元素可见性或可点击性,而不仅仅是元素存在。
所以你的代码可以是:
element = wait().until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-test-id='more_menu']")))
好的,这就是我如何让它工作的。
登录后,我从 link 中抓取了包装元素:
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()