haijie1223 发表于 2017-3-12 23:00:46

用dom对象怎么获取网页部分文本[已解决]

本帖最后由 haijie1223 于 2017-3-17 08:45 编辑

我获取某个网页的大致内容如下:<html>
<head><title> test </title></head>
<body>
<div class="test0">
<div class="test00">
<!--============获取以下内容========================-->
<ul class="result">
<li class="text0">
<div class="text1">
<div class="title">
<p><a href="baidu.com" target="_blank">logo图片预览</a></p>
</div>
<div class="test">测试文本</div>
<div class="test1"><ul><li class="test1-1">测试文本1</li></ul></div>
<div class="test2"><ul><li class="test2-1">测试文本2</li></ul></div>
</div>
</li>
</ul>
<!--==============获取以上内容======================-->
</div>
</div>
<div class="foot"></div>
</body>
</html>

在不用正则的情况下,我想利用dom对象直接获取<ul class="result">(...)</ul>之间的内容,可行么?

kevinch 发表于 2017-3-13 07:51:48

$str=FileRead(@ScriptDir&"\1.html")
$hf=ObjCreate("htmlfile")
With $hf
        .designmode="on"
        .open
        .write($str)
        For $ul In .getelementsbytagname("ul")
                If $ul.classname=="result" Then
                        ConsoleWrite($ul.outerhtml&@CRLF)
                EndIf
        Next
EndWith以上代码供发哥测试

1361739590 发表于 2017-3-13 08:44:26

回复 2# kevinch


    有直接处理 类似网页格式的这种文件? 可不可以介绍一下呀。

haijie1223 发表于 2017-3-13 09:33:00

回复 2# kevinch
多谢!测试可用。另外,html对象和InternetExplorer.Application对象的属性和方法一样的么?
用下面的代码获取'CP'标签的内容,但是源码中有两个cp,下面的代码只能获取外层cp,是不是所有的同名标签,只获取最外层的?如果遇到多个标签名相同的情况,应该怎么处理?

Dim $html = ObjCreate("htmlfile")
With $html
        .open()
        .designmode = "on"
        .write($Respond)       
        dim $text = .getelementbyid("cp").innertext
        MsgBox(0,0,$text)
EndWith<HTML>
<HEAD><TITLE>test</TITLE></HEAD>

<BODY >

<table class=style18 cellspacing=0 cellpadding=0 width=950 align=center
bgcolor=#ffffff border=0> <tbody> <tr> <td bgcolor=#FFFFFF>&nbsp;</td><td valign=top align=middle bgcolor=#ffffff>
<table cellspacing=0 cellpadding=0 width="99%"
      bgcolor=#ffffff border=0 align="CENTER"> <tbody> <tr> <td valign=top align=middle width="640">
<table bgcolor=#999999 border=0 cellpadding=0 cellspacing=1
      width=640 align="center"> <tbody> <tr> <td bgcolor=#ffffff width="640">
          
          
          <div id=cp> <table cellspacing=0 cellpadding=0 width=100% align=center border=0 bgcolor="#ffffff">
<tbody> <tr> <td> <div align="left"><span
lang=EN-US style='font-size:9.0pt;mso-bidi-font-size:10.5pt'></span> <div id=content02>
                              <div class=feature>
                              

                              <table bgcolor=#FF0000 border=0 cellpadding=0 cellspacing=1
      width=99% align="center">
                                  <tbody>
                                  <tr>
                                    <td bgcolor=#ffffff height=23>
                                    
                                    <div id=cp>
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                          <tr>
                                          <td colspan="3" height="25">
                                              <div align="left">tip</div>
                                          </td>
                                          </tr>
                                        </table>
                                        <br>
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                          <tr>
                                          <td width="3%" height="25">
                                              <div align="center">test</div>
                                          </td>                                          
                                          </tr>                                          
                                        </table>                                       
                                    </div>

                                                                          
                                    </td>
                                  </tr>
                                  </tbody>
                              </table>

                              </div>
                            </div></div></td></tr> </tbody> </table></div></td></tr>
</tbody> </table></td>
                  
                  
                  </tr>
</tbody> </table></td></tr>
</tbody> </table>

</BODY></HTML>

nmgwddj 发表于 2017-3-13 14:13:46


<div id='header'>
....
</div>
<div class='content'>
</div>
<div class='content'>
</div>
<div id='footer'>
</div>
ID:是唯一标识符,通过 document.getElementById 获取得到一个对象。不应该重复,如果网站中有重复是设计缺陷。如果有重复只能通过其他可区分的方法获取。
CLASS:可以多个重复,使用 document.getElementsByClassName 获取,得到一个对象数组。

haijie1223 发表于 2017-3-13 17:15:24

回复 5# nmgwddj


    多谢指点,我查看的那个网站源代码,确实有重复的id,有两个<div id=cp>,可能是设计者疏忽了。

black丶shark 发表于 2017-4-6 14:19:35

额。。。感觉很高深的样子,偏偏我还得用,还看不懂

black丶shark 发表于 2017-4-6 16:21:01

学习学习。。。。

black丶shark 发表于 2017-4-7 11:38:55

大神,,究竟是怎么拆分出来的啊?

black丶shark 发表于 2017-4-7 11:45:44

比如说我想获取这段代码中的信息,如:晴,阴。。

1361739590 发表于 2017-4-7 12:45:51

回复 10# black丶shark

你把网页保存成1.html

$file_html=FileRead(@ScriptDir&"\1.html")
Dim $html = ObjCreate("htmlfile")
With $html
      .open()
      .designmode = "on"
      .write($file_html)
      dim $div = .getElementsByTagName("div")

EndWith

For $i = 0 To $div.length
        If StringInStr($div($i).classname,"days7") Then

                ExitLoop
        EndIf
Next

$Aday = $div($i).getElementsByTagName("b")
$Atemp = $div($i).getElementsByTagName("span")
$Aweather = $div($i).getElementsByTagName("img")
$str = ""

For $m = 0 To $Aday.length*2-1 Step 2
        $n = $m / 2
        $str = $str & $Aday($n).innertext &"        温度:"& $Atemp($n).innertext &"        白天:"&StringFormat("%-4s",$Aweather($m).alt)&"        晚上:"&$Aweather($m+1).alt& @CRLF
Next

MsgBox(0,0,$str)

black丶shark 发表于 2017-4-21 17:20:55

回复 11# 1361739590

black丶shark 发表于 2017-4-21 17:22:24

回复 11# 1361739590


    请教一下,天气得信息在哪里,就是晴,多云什么得,我想根据获取到得天气信息调用图片,不知道这个信息在哪里,$aa = StringFormat("%-4s",$Aweather($m))
                MsgBox(0,"1",$aa)
这个不好用额

dingcool 发表于 2017-4-23 18:35:13

inetgetsource对字符串进行查找
或者分割trimleftstringlen配合就能取
页: [1]
查看完整版本: 用dom对象怎么获取网页部分文本[已解决]