我正在尝试为特定输入字段抓取 HTML 页面(以便我可以从中提取令牌以在登录期间使用)。我正在使用 SBCL 1.0.54(因为该版本可与 StumpWM 一起正常工作)、quicklisp 和以下 quicklisp 包:
drakma
closure-html
cxml-stp
如果我使用 Drakma 加载 HTML 页面,并将其转换为有效的 X(HTML),我可以使用以下代码(大致改编自 Plexippus XPath 示例):
(xpath:do-node-set (node (xpath:evaluate "//*" xhtml-tree))
(format t "found element: ~A~%"
(xpath-protocol:local-name node)))
...获得以下结果(为简洁起见被剪断;有问题的页面很大):
found element: img
found element: a
found element: img
found element: script
found element: div
found element: img
found element: a
found element: input
found element: input
但是,我似乎无法让任何 XPath 语句比“//*”正常工作更复杂。我的目标是找到具有特定名称的输入,但即使只是找到所有输入也会失败:
* (xpath:evaluate "//input" xhtml-tree)
#<XPATH:NODE-SET empty {10087146F3}>
我显然在这里遗漏了一些非常基本的东西。有人可以给我指点正确的方向吗?