minterz 发表于 2009-5-12 10:47:27

post提交后,返回的代码中,如何获取table信息,并保存为数组??

本帖最后由 minterz 于 2009-5-12 10:50 编辑

做一个小软件,实时获取skype拨打记录。现在遇到问题了,请各位高手援手。。。
    这个小软件的目的是实时获取skype拨打记录。我采用的是post的方式,$oHTTP.responseText返回后,好像是网页源码,而不是ie obj对象。这个时候用<ie.au3>里面的_IETableGetCollection 和_IETableWriteToArray就会出错。
   当然,折中的办法也有,就是把获取的源码写入.htm文件,然后用_iecreate()打开,但这样速度就慢多了。
   为了提高速度,试着直接获取table部分,然后写入.htm,打开就快多了。。

   因此,请教如下:
   1、如果用正则表达式获取 <table>      。。。</table>数据(要包含<table>和</table尾部标签),但似乎有空格,tab,换行等,获取不了。我的表达式是这样的,
$oTa1=$oHTTP.responseText
$array = StringRegExp($oTa1, '(?<=class="list">).*(?=</table>)', 1, 1)

该如何修改?

网页的table部分源码是这样的:
<table class="list">
                  <tr>
                        <th>Date, time</th>
                        <th><h3>Item</h3></th>
                        <th>Type</th>
                        <th>Rate/min</th>
                        <th>Duration</th>
                        <th class="price">Amount*</th>
                  </tr>
                                                                                                                                                                            <tr class="even">
                            <td>May 09 14:37</td>
                            <td>
                              <span dir="ltr">+8613888888</span><span class="small">, China - Mobile</span>                                                            </td>
                            <td>
                              SMS                           </td>
                            <td><span class='ccy'>&#36;</span>0.055</td>
                            <td>2</td>
                            <td class="price"><span class='ccy'>&#36;</span>0.110</td>
                        </tr>
                                                                                                                                                                                                    <tr class="odd">
                            <td>May 06 21:35</td>
                            <td>
                              <span dir="ltr">+8611111</span><span class="small">, China</span>                                                            </td>
                            <td>
                              Call                           </td>
                            <td></td>
                            <td>00:00</td>
                            <td class="price"><span class='ccy'>&euro;</span>0,000</td>
                        </tr>
                                                            </table>

2、另外,有没有全部使用$oHTTP = ObjCreate("microsoft.xmlhttp")来获取table信息的命令呢?google了半天,也没看到完整的这方面的资料,试了几个命令,au3都提示错误。

3、$oHTTP.responseText 这个获取的难道就是字符串嘛?如何能将获取的函数,直接转换成<ie.au3>能直接操作的对象呢?

谢谢。。。

文白 发表于 2009-5-12 12:51:55

$oTa1 = StringRegExp(StringRegExpReplace($oTa1, "([\s\r\n]{2,})", ""), "<[^<>]+>([^<>]+)<[^<>]+>", 3)

minterz 发表于 2009-5-12 13:36:45

谢谢楼上的,不过你这个似乎不太理想。。。
竟然返回了100多个值。。。

最理想的答案就是能在源码里面直接提取 table 信息的
3、$oHTTP.responseText 这个获取的难道就是字符串嘛?如何能将获取的函数,直接转换成<ie.au3>能直接操作的对象呢?

文白 发表于 2009-5-12 22:57:32

$oTa1 = StringRegExpReplace($oHTTP.responseText, "[^\xff]*?(<table class="list">[^\xff]*?</table>)[^\xff]*?", "$1");提取table内信息
$oTa1 = StringRegExp(StringRegExpReplace($oTa1, "([\s\r\n]{2,})", ""), "<[^<>]+>([^<>]+)<[^<>]+>", 3);保存table内信息到数组

文白 发表于 2009-5-12 23:23:48

$oTables = _IETagNameGetCollection ($oIE, "table")
For $oTable In $oTables
    If $oTable.className = "list" Then
      $array = _IETableWriteToArray ($oTable, True)
      ExitLoop
    EndIf
Next

minterz 发表于 2009-5-13 09:52:12

5# 文白


谢谢文老大。
这里 $oTa1=$oHTTP.responseText 返回的函数,_IETagNameGetCollection无法操作,au3提示错误。
如何把$oTa1=$oHTTP.responseText返回的东西,变成 IE.AU3 可以操作的对象呢?

minterz 发表于 2009-5-13 09:54:41

4# 文白


恩,太谢谢了。这个比上面的那个正则要好多了
但是还是返回了过多的值,不准确。
可能是我给的网页源码不完整的问题,我给的只是table里面的内容,整个页面,也只有这一个table。
但是实际操作后的记过,却返回了30多个,还有很多不在table里面内容的。

再次感谢!
页: [1]
查看完整版本: post提交后,返回的代码中,如何获取table信息,并保存为数组??