You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取ServiceNow动态页面失败,寻求可行解决方案

问题:爬取ServiceNow动态API文档页面失败

我需要爬取ServiceNow的Action API参考页面,目标是提取所有API名称(对应XPath://*[@id="Action_getURLParameter_S-anchor"]/div/div[1]/h3)。但目前保存的HTML仅包含页眉和页脚,主体内容区域仅显示加载图标,无法获取完整的页面内容。我已经尝试了隐式等待、显式等待、执行JavaScript获取innerHTML、延长等待时长、滚动页面等方法,均未解决问题,希望了解其他可行的尝试方案。

以下是我使用的代码:

url = "https://developer.servicenow.com/dev.do#!/reference/api/vancouver/server/no-namespace/ActionAPIBoth"

chrome_options = Options()

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=chrome_options) 

driver.get(url) 
driver.implicitly_wait(10)

print("Page Title:", driver.driver) # 此处应为driver.title,原代码有误

# 尝试显式等待但失败
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, xpath)))
    print(element)
except TimeoutException as e:
    print(e)

# 执行JS获取innerHTML也无效
driver.execute_script("return document.body.innerHTML")

page_source = driver.page_source

with open("page.html", "w", encoding="utf-8") as file:
    file.write(page_source)

可行解决方案

  • 验证登录状态与反爬规避:ServiceNow开发者文档可能需要登录才能查看完整内容,同时存在自动化检测机制。可以尝试:
    • 手动登录页面后导出Cookie,让WebDriver加载Cookie后再访问目标页面
    • 给ChromeOptions添加参数禁用自动化特征检测:
      chrome_options.add_argument("--disable-blink-features=AutomationControlled")
      chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
      chrome_options.add_experimental_option('useAutomationExtension', False)
      
  • 调整等待目标元素:不要直接等待单个API标题,改为等待整个API列表的父容器加载完成(需通过浏览器开发者工具定位实际容器的XPath或CSS选择器),确保内容区域已初始化。
  • 模拟真实用户交互:
    • 页面加载后,滚动到内容区域或点击空白处,触发动态内容的加载逻辑
    • 添加随机等待时长(如time.sleep(random.uniform(2,5))),模拟人类浏览节奏
  • 直接抓取接口数据:打开浏览器开发者工具的Network面板,筛选XHR/fetch请求,找到返回API列表的接口,直接使用requests库调用该接口获取结构化数据,这种方式比模拟浏览器更高效可靠。
  • 优化等待策略:将presence_of_element_located替换为visibility_of_element_located,确保元素不仅存在于DOM中,还处于可见状态;或使用EC.presence_of_all_elements_located等待多个API标题元素同时出现。

内容的提问来源于stack exchange,提问作者Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:29