| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1873 人关注过本帖, 1 人收藏
标题:各位大侠,能把这些内容用VFP 下载下来并能实时更新放到一个表中吗
只看楼主 加入收藏
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
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
应大家要求上传整合代码,一个子程序:
使用前传入两个参数,1.ie对象,2.期数文本,没有参数传递的话自行创建默认获取当前期的号码。
外部程序调用示例:
set proc to "****.prg"&&你的包含这段子程序的程序文件
osample=createobj("internetexplorer.application")
osample.navigate("http://www.lottery.)
cserial="******"&&你要查的期数
=BrowseAnother(osample,cSerial)
子例程的取数存放位置,你们自行修改一下,可以放到一个公共变量中,或者用文本串返回,再截取。
getwebmodified.rar (1.54 KB)


程序代码:
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./lottery/dlt/detail.aspx")
        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-13 10:33
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
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
上传你写的代码,我看一下。
2013-08-18 11:54
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
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
亲爱的,我说明白了的,你只需要将procedure.....endrpoc子过程定义的这一块放到你的程序里面,起头的那几行只是我说的从外部调用的一个示例。它不应该包含在你的程序中。
2013-08-19 13:04
快速回复:各位大侠,能把这些内容用VFP 下载下来并能实时更新放到一个表中吗
数据加载中...
 
   



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

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