1
我想爲特定輸入字段提取HTML頁面(以便我可以從中提取令牌以供在登錄期間使用)。我使用SBCL 1.0.54(因爲該版本正常工作與StumpWM),quicklisp和以下quicklisp包:在Common Lisp中使用XPath查找'輸入'標記
drakma
closure-html
cxml-stp
如果我使用Drakma加載HTML頁面,並將其轉換爲有效的X(HTML ),我可以使用下面的代碼(寬鬆適應弗羅姆斑蝶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}>
我顯然失去了一些東西基本相當這裏。有人能給我指向正確的方向嗎?
這確實是一個命名空間問題,謝謝:-)使用xpath-with-namespaces導致表達式按照我的預期行事。 –