怎样在某一网页上取某一变量的值? ( 积分: 100 )

  • 主题发起人 主题发起人 菜鸟黄
  • 开始时间 开始时间

菜鸟黄

Unregistered / Unconfirmed
GUEST, unregistred user!
我是这样做的,但这只是适用于输入框数据的获取.
//获得数据
Procedure ReadData(WebBrowser: TWebBrowser; IsPost: Boolean; Memo:TMemo;Label1:TLabel);
Var
i: Integer;
vi: oleVariant;
Dispatch: IDispatch;
HTMLDocument: IHTMLDocument2;
ElementCollection: IHTMLElementCollection;
HTMLInputElement: IHTMLInputElement;
Begin
HTMLDocument := IHTMLDocument2(WebBrowser.Document);
If HTMLDocument = Nil Then Exit;
ElementCollection := HTMLDocument.all;
For i := 0 To ElementCollection.Length - 1 Do
Begin
vi := i;
application.ProcessMessages;
Dispatch := ElementCollection.item(vi, 0);
If Succeeded(Dispatch.QueryInterface(IHTMLInputElement, HTMLInputElement)) Then
Begin
Memo.Lines.Add(HTMLInputElement.name);
If LowerCase(HTMLInputElement.value) = usernameA Then
begin
Label1.Caption:= HTMLInputElement.value;
end;
End; {For}
End;
End;
 
usernameA
是我要获取的变量的名.
 
写错了,应该是这样;
//获得数据
Procedure ReadData(WebBrowser: TWebBrowser; IsPost: Boolean; Memo:TMemo;Label1:TLabel);
Var
i: Integer;
vi: oleVariant;
Dispatch: IDispatch;
HTMLDocument: IHTMLDocument2;
ElementCollection: IHTMLElementCollection;
HTMLInputElement: IHTMLInputElement;
Begin
HTMLDocument := IHTMLDocument2(WebBrowser.Document);
If HTMLDocument = Nil Then Exit;
ElementCollection := HTMLDocument.all;
For i := 0 To ElementCollection.Length - 1 Do
Begin
vi := i;
application.ProcessMessages;
Dispatch := ElementCollection.item(vi, 0);
If Succeeded(Dispatch.QueryInterface(IHTMLInputElement, HTMLInputElement)) Then
Begin
Memo.Lines.Add(HTMLInputElement.name);
If LowerCase(HTMLInputElement.name) = usernameA Then
begin
Label1.Caption:= HTMLInputElement.value;
end;
End; {For}
End;
End;
 
网页里的元素,都可以通过DOM来访问,它们都所以网页的元素。
脚本也是元素,但脚本里的变量就不能通过dom来访问了!
你可以通过window的exescript方法来访问任何变量或者修改任何变量。
如:
document.Window.execScript('myfunc(4)','javascript');
 
哦!抱歉!
忘记了一点,execScript不会返回值,因此,它要与某个隐藏的元素配合使用,如:
document.Window.execScript('edit1.value=myvar;','javascript');
然后取edit1的值。(或者翻过来)。
 
to yeskert1
能说得具体一点吗?
 
怎么没有人来顶一下啊
 
我也很想关注,不过,如果网页数据非常大,比如大盘的数据如何动态获得??
 
可以获取的,有这个帖子,你就大富翁上搜下,肯定能找到的,我上次看到过的,不知道再哪了?
 
To zhbj
我的意思就是想做一个这样的东东.
 
doc:=web.document as ihtmldocument2;
if doc = nil then Exit;

all := doc.all;
for i := 0 to all.length -1 do
begin
Item := all.Item(I, varempty) as IHTMLElement;

sTargeName := upperCase(Item.tagName);
if (sTargeName = 'INPUT') or (sTargeName='TEXTAREA') or (sTargeName='SELECT') then
begin
sTargeValue := Item.outerHTML
end;
else if (sTargeName = 'TD') then
.....
end;

实际上取各种值都差不多,只是tagName不一样,如果不知道tagName怎么写,可以写个循环把所有的tagname都列出来
 
to coolice823
我这样写不行啊~你帮我看一下,会出错的.
//查询
Procedure ReadData(WebBrowser: TWebBrowser; IsPost: Boolean; Memo:TMemo;Label1:TLabel);
var
doc: IHTMLDocument2;
all: IHTMLElementCollection;
i:integer;
Item: IHTMLElement;
sTargeName:string;
begin
doc:=IHTMLDocument2(WebBrowser.Document);
if doc = nil then Exit;

all := doc.all;
for i := 0 to all.length -1 do
begin
Item :=IHTMLElement(all.Item(I, varempty));

sTargeName := upperCase(Item.tagName);

Memo.Lines.Add(Item.outerHTML);
end;
end;
 
顶一下,我也想知道
 
顶一下,收起来,跟踪中。
 
顶一下!
 
后退
顶部