Delphi 使用TWebBrowser解析HTML数据
我得到了一个使用TWebBrowser组件的应用程序,我有一个站点的链接,该站点使用TWebBrowser使用“for”语句打开,示例如下:Delphi 使用TWebBrowser解析HTML数据,delphi,browser,html-parsing,Delphi,Browser,Html Parsing,我得到了一个使用TWebBrowser组件的应用程序,我有一个站点的链接,该站点使用TWebBrowser使用“for”语句打开,示例如下: adoquery.sql.text = "select top 10 id from table1"; adoquery.sql.open; adoquery.sql.first; while not adoquery.eof do begin TwebBrowser.navigate("http://w
adoquery.sql.text = "select top 10 id from table1";
adoquery.sql.open;
adoquery.sql.first;
while not adoquery.eof do
begin
TwebBrowser.navigate("http://website1.com/php?id="+inttostr(id));
adoquery.next;
end;
当页面加载完成(“OnNavigateComplete”)时,我调用一个函数来解析加载的TwebBrowserData的HTML,然后在数据库中进行更新,但它不起作用。调用方法“OnNavigateComplete”时,我如何更新数据库的数据?您的问题对我来说没有多大意义,但请注意,如果您在某个地方导航TWebBrowser,并不意味着它是即时的。这需要一些时间。更准确地说,浏览器处于
READYSTATE\u COMPLETE
状态需要一段时间,这意味着文档收到了它的所有数据。上面的代码不是有效的Pascal或Delphi-您需要使用'single'
而不是'double'
引号。您也不能像那样只使用id
——您应该使用字段[0].AsString(我们知道只有一个字段)、FindField()或效率最低的FieldByName()。FindField示例:var IdFld:TField;。。。ADOQuery.Open;IdFld:=AdoQuery.FindField('ID');而不是AdoQuery.Eof做begin TwebBrowser.navigate('http://website1.com/php?id=“+IdFld.AsString)代码>您遇到了哪些错误?上述代码中有五个错误:1。使用双引号。2.使用ADOQuery.SQL.Open和ADOQuery.SQL.First而不是ADOQuery.Open;。对First的(尝试的)调用是多余的。新打开的查询已在第一条记录上。3.您需要使用fieldexpr.AsString获取ID的值。4.您需要使用TWebBrowser的实例,而不是从TWebBrowser调用Navigate
——它不是类(静态)方法。5.使用质量操作符=
而不是赋值操作符:=
使用可视化浏览器执行HTTP GET是非常过分的。使用IdHTTP
或类似的方法。@DavidHeffernan:视情况而定,有时您需要访问DOM以便于数据提取。