0

我正在使用 Selenium 在 Python 中构建一个网络爬虫。以下是搜索链接的功能。它工作正常,除了被注释掉的部分。这个想法是将鼠标悬停在正在检查的页面上找到的每个链接上,如果该悬停动作显示更多链接(例如在使用 Javascript 构建的下拉菜单中),则使用对 getLinksFromHTML 的递归调用添加这些链接( “如果代码!= 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  
4

1 回答 1

2

事实证明它不起作用的原因是我使用的是 Firefox 驱动程序。显然,对于 Firefox,move_to_element 实际上并没有将鼠标悬停在元素上,它只是“聚焦”在那里。当我切换到 Chrome 驱动程序时,它实际上悬停在菜单项上并显示子菜单。(注意实际的函数有一些错误,但这不是这个问题的重点。)

TL;DR:如果您使用 Selenium Webdriver,并且希望将鼠标悬停在链接上以显示子菜单等内容,请使用 Chrome 而不是 Firefox。

于 2013-06-23T05:26:26.033 回答