从下拉菜单中选择一个选项,该选项在单击和鼠标悬停时会打开

时间:2020-07-09 22:46:50

标签: python html selenium

我正在尝试使用Selenium和Python单击下拉按钮(id =“导出”),然后在打开时选择选项(id =“ downloadCSV”),但是当鼠标处于打开状态时,下拉列表消失不要在上面徘徊。

这是html:

<div class="actionsButton actionsDD" id="export">
                <span class="actionsLabel">Download</span>
                <ul class="actionsDDsub">
                    <li><span id="downloadCSV">CSV</span></li>
                </ul>
                <div class="actionsArrow"></div>
</div>

这是我正在尝试的代码:

export=driver.find_element_by_id('export')
download=driver.find_element_by_id('downloadCSV')
actions=ActionChains(driver)
actions.move_to_element(export)
actions.click(export)
actions.click(download)
actions.perform()

我认为问题在于,单击下拉按钮后,鼠标没有停留在按钮上。我需要单击并同时将鼠标保持在该位置,才能单击该选项。

请帮助实现该目标。非常感谢!

2 个答案:

答案 0 :(得分:0)

这可能会对您有所帮助。尝试再次将鼠标悬停在按钮上,然后执行点击操作

actions=ActionChains(driver)
actions.move_to_element(WebDriverWait(driver, 10).until(ExpectedCondition.element_to_be_clickable((By.Id, 'export'))))
actions.click(export)
actions.move_to_element(WebDriverWait(driver, 10).until(ExpectedCondition.element_to_be_clickable((By.Id, 'downloadCSV'))))// if you get elemeent not found exception then try to move_to_element to 'export' first and then click on download
actions.click(download)
actions.perform()

答案 1 :(得分:0)

下拉菜单可能仍然存在,只是处于隐藏状态。在页面上尝试按f12键时,应该会弹出您的开发工具。如果您在Chrome上查找“元素”标签,以查看网页的计算源代码。 Firefox还具有内置的开发工具。它的选项应该很容易解释,但在这里我将介绍Chrome。

在最左侧,您会在框中找到一个箭头。单击它可将源视图与页面元素同步,因此,当您将鼠标移到页面上时,它将在“元素”窗口中显示代码。将鼠标移到菜单上可以查看其代码。

但是,在这种模式下,当您将鼠标悬停时,菜单很可能不会下拉。单击要查看的元素后,您将必须调查源,您可以动态更改其css(或html)。您的更改将一直保留,直到刷新页面。而不是让硒“悬停”,只需像这样抓住所需的元素:driver.findElement(By.tagName(“ div”))。硒的文档可以在这里找到:https://www.selenium.dev/documentation/en/webdriver/web_element/

如果只需要点击链接,则获取duh标签的href值。但是,如果您需要单击链接,请尝试以下操作: driver.findElement(By.linkText(“查看示例警报”))。click();

在这种情况下,您可能只知道TEXT标记之间的文本。如果这不起作用,请在单击之前尝试使用selenium使菜单可见。要使其可见,请查看源,以查看菜单上是否没有显示。如果是这样,则使其类似于block或inline,然后重试。

如果仍然有问题,请在开发工具的“来源”标签中查看。您可以在javascript中搜索元素标签,并且还有一个调试功能可以逐步浏览代码,以查看鼠标悬停时javascript在做什么。基本上,您只需要在单击之前使元素对硒可见,也就是说,如果先前的解决方案不起作用。希望这会有所帮助。