【问题标题】:How do I scrape mouse hover-box content on an ajax webpage using Python如何使用 Python 在 ajax 网页上抓取鼠标悬停框内容
【发布时间】:2016-12-28 16:29:19
【问题描述】:

我一直在尝试从此 ajax website 中提取地图上每个单元格的维度,每个单元格的详细信息仅在鼠标指向单元格时才会弹出。

我已使用 Python selenium webdriver 和 phantomjs 加载和提取 page_source 但未找到数据。我使用 firebug 来查找可能从中加载内容但没有找到的任何 .json 文件。

请查看该站点并建议我如何从指向地图上每个单元格时移动的悬停框中抓取内容。

P.S:我在 stackoverflow 和几个网站上做了很多研究,但都无济于事。

【问题讨论】:

  • 当指向每个单元格时,我怎样才能检查悬停框移位的元素?
  • 是否只需要抓取Size 的值,比如20 x 30
  • 我想抓取悬停框的全部内容。但是关于如何获得大小值的建议也会有所帮助。因为我可以从参展商列表中获得其他信息。

标签: javascript ajax python-3.x selenium-webdriver phantomjs


【解决方案1】:

实际上没有AJAX,但svg 对象包含页面上每个项目(展位)的<g> 元素。要获得所需的信息,您必须将鼠标悬停在此 <g> 上。使用以下代码,您可以获得大部分项目描述(大约是整个 g 元素数量的 2/3)...我不确定页面的上下文是什么,所以我无法确定页面上项目出现的规律性:

from selenium import webdriver as web
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = web.Chrome()
driver.maximize_window()
driver.get('http://www.aptaexpo.com/apta2017/public/eventmap.aspx?shmode=E&thumbnail=1')
time.sleep(5)
driver.find_elements_by_tag_name('polygon')[0].click() # [1] to choose another hall 
time.sleep(5)

list_of = driver.find_elements_by_xpath('//div[@class="leaflet-overlay-pane"]/*[name()="svg"]/*[name()="g"]')
for item in list_of:
    action = ActionChains(driver)
    action.move_to_element(item)
    try:
        description = wait(driver, 3).until(EC.visibility_of_element_located((By.XPATH, '//div[*[contains(text(), "Booth:")]]'))).text
        print(description)
        action.perform()
    except:
        action.perform()

如果它解决了您的问题,请接受带有复选标记的答案。否则,请告诉我或创建新问题单,其中包含您可能在我的代码中遇到的新问题

【讨论】:

  • 非常感谢。我能够使用您的方法和代码完成它。我是stackoverflow的新手,我该如何接受你的回答。
猜你喜欢
  • 2020-11-22
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2020-08-11
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多