注册 登录
编程论坛 VFP论坛

vfp读取网页指定的一行数据!

wangjiayu45 发布于 2020-09-30 15:28, 3278 次点击
网页:http://www.  此网页显示内容为: 密码:2020929

要求:vfp9.0   label4.caption="2020929"

************************************
TRY
oXml = CreateObject("MSXML2.XMLHTTP")
cUrl = "http://www.
oXml.Open("GET", cUrl, .F.)
oXml.Send()
lcText=STRCONV(STRCONV(oXml.ResponseBody, 11), 2)
C1 = '<div id="last_box_102">密码: '
C2 = "</div>"

thisform.label4.caption=STREXTRACT(lcText, C1, C2)
THISFORM.Label4.forecolor=RGB(0,64,0)

RELEASE oXml
CATCH TO mError
messagebox("可能没有连接网络,请检查网络!",48,"错误提示!")
ENDTRY

老师:为什么我的label4.caption显示是空的? 难道是C1 = '<div id="last_box_102">密码: '错的??
还是lcText=STRCONV(STRCONV(oXml.ResponseBody, 11), 2) 错?
请老师赐教!谢谢


[此贴子已经被作者于2020-9-30 15:32编辑过]

11 回复
#2
厨师王德榜2020-09-30 16:17
把   C1 = '<div id="last_box_102">密码: '
改为:C1 = '<div id="last_box_102">密码:'
最后一个空格多余.
#3
wangjiayu452020-09-30 16:37
回复 2楼 厨师王德榜
谢谢王老师!

没用,试过了。
是不是所在的表单上有什么没有设计好!请老师测试下,谢谢。

[此贴子已经被作者于2020-9-30 17:07编辑过]

#4
mywisdom882020-09-30 17:14
按2楼说的,去掉空格,我这里测试正常
还有,可能是大小写问题,我测试发现
C1 = '<div id="last_box_102">密码:'
改为
C1 = '<div id="Last_box_102">密码:' && L 大些,发现,显示空的
所以,你可以统一大小写看看;
...
lcText=lower(STRCONV(STRCONV(oXml.ResponseBody, 11), 2))
C1 = lower('<div id="Last_box_102">密码:')
#5
wangjiayu452020-10-01 07:43
谢谢老师,我在其他form上测试,全有用。就是在我试用的form表单上不显示!是不是表单设计了什么?
#6
吹水佬2020-10-01 10:33
试试:
程序代码:
oXml = CREATEOBJECT("MSXML2.XMLHTTP")
cUrl = "http://www./index20200930102856"
oXml.Open("GET", cUrl, .F.)
oXml.Send()
IF oXml.readyState==4 AND oXml.status==200
    thisform.label4.caption = STREXTRACT(oXml.ResponseText, "密码:", "<")
ELSE
    messagebox("可能没有连接网络,请检查网络!",48,"错误提示!")
ENDIF
RELEASE oXml
RETURN
#7
wangjiayu452020-10-01 14:57
感谢:厨师王德榜 mywisdom88 吹水佬
1:厨师王德榜建议去掉空格,和mywisdom88 老师建议大小写,这个都没有问题,问题是在这个A表单上就不显示,到其他表单上都没问题。实在找不到A表单在哪做了什么设计。谢谢
2:吹水佬的代码在A表单上可以显示。但我不理解oXml.readyState==4 AND oXml.status==200   这个 4和200是怎么得来的?谢谢。
#8
吹水佬2020-10-01 15:52
以下是引用wangjiayu45在2020-10-1 14:57:20的发言:

oXml.readyState==4 AND oXml.status==200   这个 4和200是怎么得来的?谢谢。

程序代码:
readyState 属性
    值 说明
    -- ------------------------------------------------
    0  Response对象已经创建,但XML文档上载过程尚未结束
    1  XML文档已经装载完毕
    2  XML文档已经装载完毕,正在处理中
    3  部分XML文档已经解析
    4  文档已经解析完毕,客户端可以接受返回消息

status 属性
    服务器返回的HTTP状态码,其中:
    200  OK,一切正常,对GET和POST请求的应答文档跟在后面
    404  Not Found,无法找到指定位置的资源
#9
wangjiayu452020-10-02 08:47
回复 8楼 吹水佬
非常感谢!
#10
wangjiayu452020-10-02 10:38
回复 8楼 吹水佬
如果没有网络连接,则出现报错。
如下
只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录



哈哈已成功解决!!!!

[此贴子已经被作者于2020-10-2 10:58编辑过]

#11
吹水佬2020-10-02 10:41
也可以用IE对象打开网页,通过标签对象ID直接获取数据。
用这种方法时要注意是默认使用IE浏览器和当前没有打开其他第三方浏览器,否则有可能在IE对象打开网页时出现异常。
程序代码:
ie = CREATEOBJECT("InternetExplorer.Application")
ie.Navigate("http://www./index20200930102856")
DO WHILE !(ie.ReadyState==4)
    DOEVENTS
ENDDO
obj = ie.document.getElementById("last_box_102")
IF VARTYPE(obj) == "O"
    **? SUBSTR(obj.innerHTML,7)
    thisform.label4.caption = SUBSTR(obj.innerHTML,7)
ELSE
    MESSAGEBOX("可能没有连接网络,请检查网络!",48,"错误提示!")
ENDIF
ie.Quit()
#12
吹水佬2020-10-02 10:45
回复 10楼 wangjiayu45
严格来说,程序一定要设计异常处理过程,作为示例就忽略。
如:ON ERROR 和 TRY...CATCH...FINALLY 命令
1