javascript - Python 和 Selenium : What's a good way to access links hidden in dropdown menus built by Javascript?

标签 javascript python selenium webdriver

我正在使用 Selenium 在 Python 中构建一个网络爬虫。下面是搜索链接的函数。除了注释掉的部分之外,它工作得很好。这个想法是将鼠标悬停在正在检查的页面上找到的每个链接上,如果该悬停操作显示更多链接(例如,在使用 Javascript 构建的下拉菜单中),则使用对 getLinksFromHTML 的递归调用来添加这些链接( “if code != 1”部分只是为了确保只有一个递归调用)。

但是,当我在 JS 下拉菜单中有链接的页面(我正在查看的页面是 http://wilmingtontaxesandaccounting.com )上进行测试时,递归调用不会拾取任何新链接。所有可见的链接都可以正常获取。

我该怎么做才能让 Selenium 看到这些下 zipper 接?我需要一个通用的解决方案,即没有特定的元素 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 Webdriver 并且希望将鼠标悬停在链接上以显示子菜单等内容,请使用 Chrome 而不是 Firefox。

关于javascript - Python 和 Selenium : What's a good way to access links hidden in dropdown menus built by Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256415/

相关文章:

python - 使用 seaborn 和 contourf,如何绘制网格线?

python - 如何获取列表的所有可能顺序

python - 将列与 Pandas 数据框中的列表匹配

javascript - 按自定义 Angular 数据表中的列进行过滤

javascript - 使用 Karma 运行 javascript 单元测试时,Gradle exec 任务挂起

javascript - 使用 Web Workers 在 Canvas 中绘制区域

selenium - 如何将参数从 Selenium Webdriver 传递到 JMeter?

php - 法语、俄语等外语的拼写纠正

python - 如何在 Python 中不使用带有 Selenium 的 <Select> 标记时选择下拉选项

testing - 闪光范围问题 - Play Framework