如何用selenium python从自动完成框中提取数据

2024-04-25 22:52:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从搜索框中提取数据,您可以在wikipedia上看到一个很好的示例

这是我的代码:

driver = webdriver.Firefox()
    driver.get(response.url)                
    city = driver.find_element_by_id('searchInput') 
    city.click()
    city.clear()
    city.send_keys('a')
    time.sleep(1.5) #waiting for ajax to load              
    selen_html = driver.page_source
    #print selen_html.encode('utf-8')
    hxs = HtmlXPathSelector(text=selen_html)
    ajaxWikiList = hxs.select('//div[@class="suggestions"]')
    items=[]
    for city in ajaxWikiList:
        item=TestItem()
        item['ajax'] = city.select('/div[@class="suggestions-results"]/a/@title').extract()
        items.append(item)
    print items    

Xpath表达式没问题,我检查了一个静态页面。如果我取消了打印废弃html代码的行的注释,则该框的代码将显示在文件的末尾。但出于某种原因,我不能用上面的代码从中提取数据?我必须错过一些东西,因为我尝试了两个不同的来源,维基百科页面只是另一个来源,我不能得到这些数据提取。 有什么建议吗?谢谢!在


Tags: 数据代码divcityforhtmldriverajax
1条回答
网友
1楼 · 发布于 2024-04-25 22:52:39

不要传递.page_source,它在您的例子中包含一个空的suggestionsdiv,而是获取元素的innerHTML,并将其传递给Selector

selen_html = driver.find_element_by_class_name('suggestions').get_attribute('innerHTML')

hxs = HtmlXPathSelector(text=selen_html)
suggestions = hxs.select('//div[@class="suggestions-results"]/a/@title').extract()
for suggestion in suggestions:
    print suggestion

输出:

^{pr2}$

请注意,最好使用selenium^{}特性来等待元素可访问/可见,请参见:

另外,请注意HtmlXPathSelector已弃用,请改用^{}。在

相关问题 更多 >