Python和Selenium:What'这是访问Javascript构建的下拉菜单中隐藏的链接的好方法
Python and Selenium: What's a good way to access links hidden in dropdown menus built by Javascript?
我正在使用Selenium在Python中构建一个网络爬虫。下面是搜索链接的函数。它运行良好,除了被注释掉的部分。这个想法是将鼠标悬停在正在检查的页面上的每个链接上,如果悬停操作显示了更多的链接(例如,在用Javascript构建的下拉菜单中),则使用对getLinksFromHTML的递归调用添加这些链接("if code!=1"部分只是为了确保只有一个递归调用)。
然而,当我在JS下拉菜单中有链接的页面上测试递归调用时,它不会拾取任何新的链接(我正在查看的页面是http://wilmingtontaxesandaccounting.com)。所有可见的链接都被很好地拾取。
我该怎么做才能让Selenium看到这些下拉链接?我需要一个通用的解决方案,即没有特定的元素ID或任何其他特定于页面的代码。感谢阅读!
def getLinksFromHTML(currUrl, code):
ListlinkerHref = browser.find_elements_by_xpath("//*[@href]")
links1 = []
links2 = []
for link in ListlinkerHref:
url = link.get_attribute("href")
#hov = ActionChains(browser).move_to_element(link)
#hov.perform()
#if code != 1:
#links1 = self.getLinksFromHTML(currUrl, 1)
if url not in links1:
links2.append(url)
return links1 + links2
原来它不起作用的原因是我使用的是Firefox驱动程序。显然,在Firefox中,move_to_element实际上并没有悬停在元素上,它只是"聚焦"在那里。当我切换到Chrome驱动程序时,它实际上悬停在菜单项上并显示子菜单。(请注意,实际函数中有一些错误,但这不是这个问题的重点。)
TL;DR:如果你使用的是Selenium网络驱动程序,并且你想将鼠标悬停在链接上以显示子菜单等内容,请使用Chrome,而不是Firefox。
相关文章:
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- angular的下拉菜单
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 创建下拉菜单
- 下拉菜单在菜单按钮的边缘闪闪发光
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- 硒IDE下拉菜单
- 我的下拉菜单中的链接不起作用
- Bootstrap Dropdown selection是在*all*下拉菜单上设置选择
- 如何将JSON转换为HTML下拉菜单
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 基于下拉菜单创建开关
- 动态填充两个下拉菜单
- 如何将CSS(特别是填充/边距)应用于select下拉菜单的选项或optgroup
- 基于其他下拉菜单选择隐藏/显示下拉菜单
- JavaScript下拉菜单-部件在Mac上消失
- I'I’我正在尝试向网站添加下拉菜单;m构建(HTML/CSS/JavaScript)
- Python和Selenium:What'这是访问Javascript构建的下拉菜单中隐藏的链接的好方法
- 用json构建一个下拉菜单
- 从Google电子表格数据在网页上构建/填充下拉菜单