如何获取网页apx-root标签内动态生成的HTML代码
问题解决方案
问题根因
你最初代码失效的核心原因是目标页面是单页应用(SPA),所有内容靠前端JavaScript动态渲染生成,调用driver.get()后立即读取DOM,此时apx-root标签内的内容还没完成渲染,只能拿到空值或者不完整的内容。
优化后可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException url = "https://registry.verra.org/app/projectDetail/VCS/812" # 可按需配置Chrome启动参数 options = webdriver.ChromeOptions() # options.add_argument("--headless=new") # 取消注释开启无头模式,无可视化窗口 driver = webdriver.Chrome(options=options) driver.get(url) delay = 10 # 可调整超时时长,适配不同网络环境 try: # 直接等待apx-root标签加载完成,无需指定其他业务元素,适配性更强 WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > apx-root'))) # 额外增加短等待,确保内部动态内容完全渲染 driver.implicitly_wait(2) except TimeoutException: print("页面加载超时,请检查网络或调整等待时长") apx_root = driver.find_element(By.CSS_SELECTOR, 'body > apx-root') html_content = apx_root.get_attribute("innerHTML") print(html_content) # 执行完成后关闭驱动释放资源 driver.quit()
补充说明
- 你自行排查出的等待逻辑方向完全正确,上述代码对等待条件做了简化,不需要额外定位其他业务元素即可适配所有同类型页面
- 如果后续需要从拿到的innerHTML里提取具体字段,推荐配合BeautifulSoup解析,代码更简洁易维护
- 网络环境较差的情况下可以适当延长delay的数值,避免超时误判
内容的提问来源于stack exchange,提问作者Blackoli
相关产品推荐
相关产品推荐

