关于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函数更快更简单。


本页地址:http://www.foxtable.com/webhelp/topics/6996.htm