BCB如何取得網頁文本指定內容

wnc_benson 2007-09-13 12:45:00
我最近想完成一個小程序,用BCB去取得網頁裡所需的文本內容,顯示到程序界面。
網頁內容為路由器的Web界面,有用戶名密碼,比如:Username=admin;password=admin,
WEB左則為Tree選項,跟CSDN網頁左則選項類似,選中每一項,其網址不變,
比如:http://192.168.1.254/home.asp。我想取的數據不在一個界面上。
各位有誰知道怎麼實現的請不吝相告。
我試用TidHTTP控件取asp內容不完整,用CppWebBrowser不會取網頁文本.
感謝與期待中...........
...全文
622 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wnc_benson 2007-09-21
  • 打赏
  • 举报
回复
雖然問題沒能解決,但還是要感謝兩位的幫助。
結帳。
wnc_benson 2007-09-16
  • 打赏
  • 举报
回复
楼上的兄弟误会了,我佩服黑客,但我不会也干不了黑客的事。
我们公司主要生产蓝牙、WIFI网卡及无线路由器等产品,主要是在路由器部份,
生产线作业人员在进行测试时,需要打开路由器的WEB控制员查看Firmware版本
及产品的MAC Address和Region所对应的Channel是否正确,因为要打开网页,
而这些参数又不在一个框架页内,还有密码登陆,极为不方便,因此想写这样的一
个程序来方便生产作业而已。
现在主要一个问题没有解:
即如何取得所有框架内网页的内容?因为我用IdHTTP,只取到首页的内容,结果
内容还不全面,好象是由于Firmware里挂了Java,所以IdHTTP取不到有些内容。
Afile 2007-09-16
  • 打赏
  • 举报
回复
楼主可以考虑使用标准的浏览器如IE、FireFox或是GreenBrowser先人工打开,并通过查看框架页内容、框架内各成员所有URL来确定登录页的URL,如果里面有脚本,由于脚本相对固定,可以考虑直接用BCB的代码替代性地实现,换言之就是把脚本移植到BCB下。一般来说这样已经可以做到大部分登录页所需要的过程了。

框架页也并没有太多可怕的地方,指的是一个框架页描述了把浏览器如何分框,各框内各自打开哪一个URL。IE的“查看源代码”功能一般只会直接给你打开框架页的源码,不过在框架的另别框上使用右键弹出的“查看源代码”功能,可以直接看到该框的源代码。如果你使用FireFox或是GreenBrowser,应该可以更方便地看到相关的信息,像FireFox的查看帧信息功能,就比较理想,可以看到该URL所打开的表单的各个成员、及表单的提交目标URL。
Afile 2007-09-16
  • 打赏
  • 举报
回复
严格地按照HTTP协议来编程,就算只用Socket都可以很轻松地完成取得一个页面,组织有效合法的内容来进行提交来完成这个过程。当然,有控件用那是给楼主的一些参考意见:

1、我试了使用IdHttp控件。
2、Get(URL)方法其实不仅仅用于打开网页,至少可以完成HTTP协议里的两个最基本的操作:GET和POST。
3、如果有没有复杂的脚本需求,简单的表单操作,一般只需要GET表单页,处理数据和依据表单页数据准备好要提交的URL串或及相关的数据,依据表单页中的目标和方法,GET一个完整的带有表单元素的URL或是POST一个带有特定相关表单元素及Cookie数据的URL,再次使用权Get(URL)并取得新的表单元素或是Cookie来维持以后的会话就可以了。

例子:
假设登录页的URL是 http://192.168.1.1/index.htm,这个页面带有一个表单LOGIN,关键的表单元素是USERNAME和PASSWORD,表单的目标URL是http://192.168.1.1/login.asp,方法为POST,用一个名字叫uid的Cookie作为会话识别。

首先是Get ("http://192.168.1.1/index.htm") 得到整个页面到一个AnsiString内,其次在Response的结构内会得到服务器发来的Cookie,比如值为uid=1212121ABC。

这个时候可以使用一个新的TIdHTTP的实例来访问它。
其次是把你打算使用的密码和用户名置入这个实例的RequestHead结构(可能写错了,没在BCB边上),并且把Cookie也设上。最后把请求方法设定成POST方法,Get ("http://192.168.1.1/login.asp")得到登录结果字符串,依据字符串的内容来判断是否登录成功,使用新得到的Cookie来告诉WEB Server你的身份是登录过的。

楼主多半是想写一个自动扫路由器的弱用户名和密码的扫描器吧.... 感觉要写这样的程序而无从下手的,多是新手黑客。
wnc_benson 2007-09-15
  • 打赏
  • 举报
回复
3.运行程序时,就不能手动再去选择某个选项来取得内容了,也不要弹出来IE,那样就
失去了程序的意义。程序的目的就是只需要输入路由器的IP和用户名密码,就可以取得
所有我需要的信息。
wnc_benson 2007-09-15
  • 打赏
  • 举报
回复
终于等到牛人们的支持了,而且还是大版主老妖同志。
让我荣幸之至。好,我就详细说说我的要求:
1.我要取的是无线路由器的WEB控制页面的MAC Address、Channel、Firmware版本等信息
2.一般的路由器不是有网络参数、DHCP服务、安全设置等选项,选择这些选项时,柜架内的
页面都不一样的,但网页地址都是http://192.168.1.1/不变的,idHTTP->GET()只能
设置"http://192.168.1.1/",只能取得首页的内容吧?那其它选项柜架内的内容如何取得呢?
不知道我表达清楚了没?
ccrun.com 2007-09-14
  • 打赏
  • 举报
回复
楼主说的是框架内的页面吧?既然你读取的路由的WEB控制页面,那个页面的内容相对来说是固定的,完全可以通过IdHTTP或CppWebBrowser组件将其内容读取,然后通过IHTMLDocument2接口来分析页面,读取/修改需要的内容。另外,你提的问题确实有些笼统,我暂时只能说这些。
wnc_benson 2007-09-14
  • 打赏
  • 举报
回复
不要讓我傷心和失望。
因為BCB裡牛人相當多的。
是我問得太弱智了還是大家不屑回答?

1. 用idHTTP->GET(url)可以取得網頁資料,但在我要的http://192.168.1.254/home.asp
網頁裡,怎麼隻能取得一小部份內容?一般的網頁都取得比較全的資料
2. 一點思路都還沒有。
wnc_benson 2007-09-13
  • 打赏
  • 举报
回复
第3点已解:
从网上查得资料可以用:
IdHTTP->Request->username="admin";
IdHTTP->Request->password="admin";

但是第1、2点还不知道怎么解?
wnc_benson 2007-09-13
  • 打赏
  • 举报
回复
補充一下,通過“如何读取网页内表格数据”貼子可以抓到指定的文本數據。
問題是:
1. 用idHTTP如何取得.asp網頁的全部內容?
2. 如何取得該網頁下另一個選擇項頁面的內容?
3. 有用戶名和密碼的,如何設定登陸頁面?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧