关于xpath检索
xpath检索非常强大,是爬虫类软件开发利器。
本节内容可参考示例文件"CaseStudy\WebViewer\xpath查询.Table"
上述示例包含基础和进阶,建立有兴趣的用户学习掌握一下,关于xpath的基础语法可以通过互联网或AI学习掌握。
Foxtable提供了两个函数,用于根据xpath检索元素。
这两个函数是WebViewer独有的,并非来自标准的DOM,所以在这里简单介绍一下。
xpathQuery
根据xpath检索元素,返回符合条件的第一个元素。
例如:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
nextPage = wv.xpathQuery("//a[@class='changePage'
and text()='下一页']")
If
(Await
nextPage.isNull()) =
False
Then
'如果存在下一页按钮
nextPage.click()
'模拟单击下一页按钮
End
If
这里要检索的是应用了"changePage"样式且文本内容为"下一页"的a元素,并模拟单击之。
这种检索用标准的DOM检索函数是没有办法一步到位的,如果没有xpathQuery函数,就只能靠遍历了:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
changePages = wv.querySelectorAll("a.changePage")
Dim
count
As
Integer
=
Await
changePages.length
For
i
As
Integer
= 0
To
count - 1
Dim
txt
As
String
=
Await
changePages(i).text
If
txt.Trim("""")
=
"下一页"
Then
'如果这个命令是下一页
changePages(i).click()
'模拟单击下一页
End
If
Next
xpathQueryAll
根据xpath检索元素,返回符合条件的全部元素。
例如:
'''Async
'获取所有评论中提及“XPath”的评论
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
output
As
String
=
""
' xpath说明:
' 1. //div[@class='comment']
定位所有评论
' 2. [contains(., 'XPath')]
文本内容包含“XPath”(忽略大小写需使用
translate,但这里简单演示)
Dim
comments = wv.xpathQueryAll("//div[@class='comment'][contains(.,
'XPath')]")
Dim
count =
Await
comments.length
output &=
"提及
'XPath' 的评论数:"
& count & vbCrLf & vbCrLf
For
i
As
Integer
= 0
To
count - 1
Dim
text =
Await
comments(i).innerText
text = text.Trim(""""c)
output &=
" "
& text & vbCrLf
Next
MessageBoxA.Show(output,
"评论内容匹配(包含)")
提示:
1、xpath检索虽然强大,但如果能用标准DOM函数实现检索,就没必要用xpath检索,因为内置DOM函数更快更简单。