找回密码
 加入
搜索
查看: 4505|回复: 6

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

[复制链接]
发表于 2009-5-12 10:47:27 | 显示全部楼层 |阅读模式
本帖最后由 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)
 楼主| 发表于 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
 楼主| 发表于 2009-5-13 09:52:12 | 显示全部楼层
5# 文白


谢谢文老大。
这里 $oTa1=$oHTTP.responseText 返回的函数,_IETagNameGetCollection  无法操作,au3提示错误。
如何把$oTa1=$oHTTP.responseText  返回的东西,变成 IE.AU3 可以操作的对象呢?
 楼主| 发表于 2009-5-13 09:54:41 | 显示全部楼层
4# 文白


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

再次感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 08:31 , Processed in 0.076618 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表