Python如何爬取启用JavaScript的网页并获取悬浮框元素
问题原因
你用requests无法拿到业务数据是因为目标页面属于客户端渲染(CSR)类型:初始返回的HTML只有页面骨架和元数据,所有业务数据都是页面加载完成后由JS异步请求渲染生成的,悬浮框、点击触发的内容更是需要用户交互后才会渲染到DOM结构里,静态HTTP请求自然无法获取这类内容。
解决方案
方案1:使用无头浏览器模拟真实交互(最适配你的需求)
你可以用Selenium、Playwright这类工具模拟真实浏览器的运行逻辑,支持等待异步渲染、模拟点击、模拟鼠标悬浮等操作,直接拿到渲染完成后的全量DOM内容,操作门槛最低。
首先安装依赖:pip install selenium webdriver-manager
示例代码如下:from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from webdriver_manager.chrome import ChromeDriverManager import time # 配置无头浏览器参数 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless=new") # 启用无头模式,不弹出浏览器窗口 chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 规避基础反爬检测 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) # 打开目标页面 target_url = "https://cronoschimp.club/market/details/2424?isHonorary=false" driver.get(target_url) time.sleep(3) # 等待页面全量渲染,可替换为显式等待提升效率 # 获取全量页面文本内容 full_page_text = driver.find_element(By.TAG_NAME, "body").text # 也可以用driver.page_source获取完整HTML结构自行解析 # 模拟鼠标悬浮获取悬浮框内容示例 # 替换为你需要悬浮的元素的CSS选择器 hover_ele = driver.find_element(By.CSS_SELECTOR, "目标悬浮元素的CSS选择器") ActionChains(driver).move_to_element(hover_ele).perform() time.sleep(1) # 等待悬浮框渲染完成 popover_content = driver.find_element(By.CSS_SELECTOR, "悬浮框元素的CSS选择器").text print(popover_content) # 模拟点击操作示例 # click_ele = driver.find_element(By.CSS_SELECTOR, "目标点击元素的CSS选择器") # click_ele.click() # 关闭浏览器 driver.quit()方案2:直接抓异步接口请求
如果你追求更高的爬取效率,可以打开浏览器F12开发者工具的「网络」面板,筛选「Fetch/XHR」类型的请求,刷新页面后找到返回业务数据的接口,梳理接口的请求参数、鉴权规则后直接用requests调用接口拿数据,不需要启动浏览器,性能更高,但需要额外梳理交互触发接口的参数逻辑,适配成本比方案1高。
内容的提问来源于stack exchange,提问作者FChm
相关产品推荐
相关产品推荐

