我一直在尝试从这个ajax website中提取地图上每个单元格的维度,每个单元格的详细信息仅在鼠标指向单元格时弹出。
我使用Python selenium webdriver和phantomjs来加载和提取page_source但是找不到数据。我使用firebug来查找内容可能正在加载但未找到的任何.json文件。
请查看该网站,并建议我如何在指向地图上的每个单元格时从悬停框中抓取内容。
P.S:我在stackoverflow和几个网站上做了很多研究,但都无济于事。答案 0 :(得分:0)
实际上没有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()
如果问题解决了您的问题,请以复选标记接受此答案。否则,请告诉我或创建新的问题单,其中包含您可能遇到的新问题