郁闷,关于创建IHTMLDocument2对象解析的问题.....(200分)

  • 主题发起人 主题发起人 hs-kill
  • 开始时间 开始时间
H

hs-kill

Unregistered / Unconfirmed
GUEST, unregistred user!
像下面这段代码,我先用idhttp取得一个页面的全部代码存到一个stringlist里,然后通过mshtml里的IHTMLDocument2来解析这个页面
可是按照下面这个代码执行出来以后的连接都是以about:blank开头的....应该再设置哪才能让取得的连接是完整的http路径?

var
doc:IHTMLDocument2;
ln:IHTMLAnchorElement;
i:integer;
vHTML : OleVariant;
begin
doc:=CoHTMLDocument.Create as IHTMLDocument2;
doc.designMode:='ON';
doc.charset:='UTF-8';
vHTML := VarArrayCreate([0, 0], varVariant);
vHTML[0] := strs.Text; //这里strs.text是我事先取得的一个页面的代码
doc.Write(PSafeArray(TVarData(vHTML).VArray));

for i:=0 to doc.links.length-1 do
begin {我要在这里解析这个页面的全部连接}
if SUCCEEDED(doc.links.item(i,0).QueryInterface(IHTMLAnchorElement, ln)) then
memo1.Lines.Add(ln.href); {这里取得的都是以about:blank开头的相对路径}
end;
doc.close;
doc:=nil;
end;
 
http://www.bsalsa.com/ie_parser.html
 
试试我这个,测试通过
procedure TForm1.btn1Click(Sender: TObject);
var
htmlDoc:IHTMLDocument2;
FirstLink:IHTMLElement;
allLinks:IHTMLElementCollection;
url,urlStr:string;
begin
mmo1.Clear ;
wb1.Navigate('http://www.zhcw.com/lottery/db_history.htm');
while wb1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages ;

htmlDoc := wb1.Document as IHTMLDocument2;
allLinks:=htmlDoc.all;

FirstLink := AllLinks.Item(0, '') as IHTMLElement;
url := FirstLink.toString;
urlStr := FirstLink.outerText;
mmo1.Lines.Add(urlStr);
end;
 
这是我一直用的代码
if wb1.Document = nil then Exit;
//Memo1.Lines.Add(IHTMLDocument2(WebBrowser1.Document).Body.OuterHtml) ; //获取源代码
coll := (wb1.Document as IHTMLDocument2).all;
coll := (coll.tags('a') as IHTMLElementCollection);
for i := 0 to coll.Length - 1 do
begin // 循环取出每个url
elem := (coll.item(i, 0) as IHTMLElement);
url := Trim(string(elem.getAttribute(WideString('href'), 0)));
Text := Trim(string(elem.outertext));
if pos(PostText, Text)>0 then
begin
elem.click;
Result := '2';
Break;
end;
//DebugInfo(text+#13#10+url) ;
Application.ProcessMessages;
end;
 
呃.......wulingbo2005、枝上柳绵 可能没明白我的问题,用webbrowser来取得页面当然没问题
但是那样慢,而且我只是想通过htmldocument2接口来解析html而已,所以我是用CoHTMLDocument手动创建的document

所以就出现了我说的问题,网页里的相对路径不能转化为绝对的url


TO -e :
提供的资料是EmbeddedWB的,我下了他的源码,研究过,好像他只有从文件读取html和从URL里读取,没有直接写入html的相关资料

也许是我看的不够仔细? 能否再指点一二?
 
你本身就没提示完整的Http://地址 他到哪儿去取
如果你把文件另存为就有原来的地址了
或者直接复制到WORD 存为aa.mht
 
你也可以判断下 doc.url是不是about:blank再自己做处理
 
噢,那段代码我也用过,直接读取源文件
但是不太好转化为document吧?
我没有用过,但是我想既然你可以转换成功,那就相当于直接用webbrowser吧?
然后直接用上面的代码,似乎也可以
 
webbrowser比较慢,他包括了提交/获取数据、解析数据、显示数据
而我只需要其中的解析部分
提交获取我用idhttp做了,那个默认是无视IE当前的cookie的,提交比较方便
显示部分我根本就不需要

哎 现在的情况是读取、加载、解析都没问题,就是那个该死的URL

刚查了半天,确实是cxz9所说的,因为DOC.url是'about:blank'
可是doc.url提供写set_url的方法,却无法调用,提示禁止操作....NND....
我就是不想存文件或者用webbrowser,因为那样比较慢.....

谁有什么好办法啊.....
实在不行我只能替换了....about:是主域名..about:blank是提交的地址....哎...不要啊
 
http://www.bsalsa.com/protocols.html
 
e-东西虽然对我没有帮助...不过启发还是不小....虽然没解决我的问题....-_-

cxz9说的保存成mht后能显示完整路径是因为在保存的时候已经把相对路径转成了绝对路径

哎.....暂时先手动替换吧
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
588
import
I
后退
顶部