首页 > 解决方案 > 如何选择带有硒的切片机?

问题描述

我想知道如何在 Power bi 中使用 selenium 和 Python 选择切片器。

尽管我确实怀疑这并不是真正的 power bi 特定的,更多的是如何将 selenium 与特定的 html 一起使用。

请参阅我的下图作为示例:

Imgur 链接 - 示例

因此,我想单击突出显示的下拉菜单,然后选择其中的一个(或多个)选项。

看起来该结构类似于 div 中的 div .... 直到您到达复选框(请参见下面的屏幕截图)。

图 2

我是 selenium 的新手,对 html 了解不多,所以我很难弄清楚如何用 selenium 选择一个,如果有人能帮助我如何使用 selenium + python 单击其中一个过滤器,我将不胜感激。

看起来它也是动态的,所以我真的被卡住了。到目前为止,我所做的所有示例都是基本的搜索栏,它们有一个我可以很容易地用来识别我想要什么的 id。

要访问网页,请单击此处:

微软 PBI 报告

并单击示例报告,当加载运行代码以生成报告时,您将看到我的第一个屏幕截图。

谢谢!

标签: pythonpython-3.xseleniumselenium-webdriverpowerbi

解决方案


考虑到页面上的所有动态元素,Power BI online 确实不是开始学习自动化的好地方。即使作为一位经验丰富的自动化工程师,这个站点也极其复杂。

在对报表进行任何操作之前,您需要切换到iframe报表所在的元素。

iframe = driver.find_element_by_xpath("//div[contains(@class, 'reportContainer')]/iframe");
driver.switch_to.frame(iframe)

一旦你这样做了,你就可以开始选择过滤器了。以下是我选择“月份”过滤器的方法:

# expand the 'Month' filter
driver.find_element_by_xpath("//filter[li/div/div/h2[contains(@title, 'Date')]]").click()

这只会扩展过滤器。现在,我们必须从复选框中选择一个项目:

# select "jan-14"
driver.find_element_by_xpath("//div[contains(@aria-label, 'Jan-14')]").click()

给定某些文本参数,您将需要更新您的 XPath 以单击不同的元素。例如,如果您想选择isVanArsdel而不是Month,则必须修改 XPath 选择器,如下所示:

# expand the 'isVanArsdel' filter
driver.find_element_by_xpath("//filter[li/div/div/h2[contains(@title, 'isVanArsdel')]]").click()

由于此页面的性质,您的问题很可能不会到此结束。准备好尝试不同的方法来点击元素,例如 Javascript 点击。

如果常规 Selenium.click()不起作用,可以执行 Javascript 点击:

myElement = driver.find_element_by_xpath("someXPath")
driver.execute_script("arguments[0].click();", myElement)

希望这个对你有帮助。


推荐阅读