| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1873 人关注过本帖, 1 人收藏
标题:各位大侠,能把这些内容用VFP 下载下来并能实时更新放到一个表中吗
取消只看楼主 加入收藏
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
结帖率:93.88%
收藏(1)
已结贴  问题点数:20 回复次数:4 
各位大侠,能把这些内容用VFP 下载下来并能实时更新放到一个表中吗
各位大侠,能把
http://www.lottery.
”出球顺序: 26 30 02 33 31-12 11(本期使用:第3套摇奖球)“
的这些内容用VFP 实时更新下载下来放到一个表中吗

[ 本帖最后由 jinanshui 于 2013-8-7 14:59 编辑 ]
2013-08-07 14:57
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
以下是引用sdta在2013-8-9 01:01:57的发言:

这个网页由两部分组成,要提取的数据部分,按正常方法是下载不下来的。
必须是精通网页制作与VFP的高手才能提取你所要的数据。
版主大侠是高手,请出手。
2013-08-09 08:17
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
以下是引用whinda在2013-8-12 02:13:30的发言:

这个子程序用于更改期数并刷新网页,你可以将更新后的网页引用返回给上面的处理过程呀!
在程序末加一句返回代码就可以了
return oie.document
 
如:
local oNew
oNew=BrowseAnother("13092")
 
这时你的oNew就取得了子进程中打开的IE的处理句柄(实际上是oie.document),就可以像前述代码一样处理它了。
对,还请whinda大侠出手
2013-08-13 08:59
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
set proc to "lll.prg"&&你的包含这段子程序的程序文件
osample=createobj("internetexplorer.application")
osample.navigate("http://www.lottery.)
cserial="13084"&&你要查的期数
=BrowseAnother(osample,cSerial)


Procedure BrowseAnother
    Lparameters oie,cSerial&&浏览器对象,期数
    &&缺少时自行创建,期数缺少时默认为当前期
    #Define err_web_select "SELECT选择框个数变化,未能定位。"
    Local otab,ntable,nrow,ncolumn,aResult[1]
    If Type("oie")#"O"&&
        oie=Createobject("InternetExplorer.Application")
        oie.Navigate("http://www.lottery.)
        Do While oie.readystate#4
            Wait "" Timeout 1
        Enddo
    Endif
    ******************以上确保传递了ie对象,如果没有就自行创建*******************

    otab=oie.Document.getelementsbytagname("select")&&取得Select选择框对象引用
    If otab.Length=1 .And. !Empty(cSerial)
        otab.Item(0).Value=cSerial&&改期数为传入值
        oie.Document.Forms(0).submit&&递交网页申请,页面刷新后,oTab的对象引用被重置,不可用了
        &&需要重新申请引用
    Else
        If otab.Length>1
            =Messagebox(err_web_select,0)&&有多个SELECT,不能定位,需要重新分析。
            Return .F.
        Endif
    Endif
    ***********************************取数据**********************************************************
    otab=oie.Document.getelementsbytagname("table")&&取页面所有表
    For ntable=1 To otab.Length&&表、行、列均是从0开始的,此为oTab中表的总个数
        For nrow=1 To otab.Item(ntable-1).Rows.Length&&当前表(ntable-1号表)中总行数
            For ncolumn=1 To otab.Item(ntable-1).Rows(nrow-1).cells.Length&&当前表,当前行(第nRow-1行)中的总列数(单元格数)
                aResult[ALEN(aResult)]=otab.Item(ntable-1).Rows(nrow-1).cells(ncolumn-1).InnerText&&取每个单元格文本
                Dimension aResult[ALEN(aResult)+1]&&数组变大重申明
            Endfor
        Endfor
    Endfor
    ***************************************筛选数据********************************************************
    Local n1,n2,n3,n4,n5,n6,n7,nBall&&各位出奖号及用的第几套球
    For ncolumn=1 To Alen(aResult)-1
        If "出球顺序:"$aResult[ncolumn] .And. "本期使用"$aResult[ncolumn]&&检索含开奖顺序的数组,应该是aResult[8]
            n1=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+10,2)
            n2=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+13,2)
            n3=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+16,2)
            n4=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+19,2)
            n5=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+22,2)
            n6=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+25,2)
            n7=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+28,2)
            nBall=Substr(aresult[ncolumn],At("本期使用",aresult[ncolumn])+12,1)
            Exit
        Endif
    Endfor
Endproc
运行不了,反映
otab=oie.Document.getelementsbytagname("select")&&取得Select选择框对象引用-------不是一个对象,添麻烦了。


[ 本帖最后由 jinanshui 于 2013-8-18 11:28 编辑 ]
2013-08-18 11:25
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
老师,就是这些。
set proc to "lll.prg"&&你的包含这段子程序的程序文件
osample=createobj("internetexplorer.application")
osample.navigate("http://www.lottery.)
cserial="13084"&&你要查的期数
=BrowseAnother(osample,cSerial)


Procedure BrowseAnother
    Lparameters oie,cSerial&&浏览器对象,期数
    &&缺少时自行创建,期数缺少时默认为当前期
    #Define err_web_select "SELECT选择框个数变化,未能定位。"
    Local otab,ntable,nrow,ncolumn,aResult[1]
    If Type("oie")#"O"&&
        oie=Createobject("InternetExplorer.Application")
        oie.Navigate("http://www.lottery.)
        Do While oie.readystate#4
            Wait "" Timeout 1
        Enddo
    Endif
    ******************以上确保传递了ie对象,如果没有就自行创建*******************

    otab=oie.Document.getelementsbytagname("select")&&取得Select选择框对象引用
    If otab.Length=1 .And. !Empty(cSerial)
        otab.Item(0).Value=cSerial&&改期数为传入值
        oie.Document.Forms(0).submit&&递交网页申请,页面刷新后,oTab的对象引用被重置,不可用了
        &&需要重新申请引用
    Else
        If otab.Length>1
            =Messagebox(err_web_select,0)&&有多个SELECT,不能定位,需要重新分析。
            Return .F.
        Endif
    Endif
    ***********************************取数据**********************************************************
    otab=oie.Document.getelementsbytagname("table")&&取页面所有表
    For ntable=1 To otab.Length&&表、行、列均是从0开始的,此为oTab中表的总个数
        For nrow=1 To otab.Item(ntable-1).Rows.Length&&当前表(ntable-1号表)中总行数
            For ncolumn=1 To otab.Item(ntable-1).Rows(nrow-1).cells.Length&&当前表,当前行(第nRow-1行)中的总列数(单元格数)
                aResult[ALEN(aResult)]=otab.Item(ntable-1).Rows(nrow-1).cells(ncolumn-1).InnerText&&取每个单元格文本
                Dimension aResult[ALEN(aResult)+1]&&数组变大重申明
            Endfor
        Endfor
    Endfor
    ***************************************筛选数据********************************************************
    Local n1,n2,n3,n4,n5,n6,n7,nBall&&各位出奖号及用的第几套球
    For ncolumn=1 To Alen(aResult)-1
        If "出球顺序:"$aResult[ncolumn] .And. "本期使用"$aResult[ncolumn]&&检索含开奖顺序的数组,应该是aResult[8]
            n1=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+10,2)
            n2=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+13,2)
            n3=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+16,2)
            n4=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+19,2)
            n5=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+22,2)
            n6=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+25,2)
            n7=Substr(aresult[ncolumn],At("出球顺序:",aresult[ncolumn])+28,2)
            nBall=Substr(aresult[ncolumn],At("本期使用",aresult[ncolumn])+12,1)
            Exit
        Endif
    Endfor
Endproc
2013-08-19 11:16
快速回复:各位大侠,能把这些内容用VFP 下载下来并能实时更新放到一个表中吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040642 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved