Delphi WebBrowser 基本操作与常见问题的解决方案

news/2024/12/24 9:43:21 标签: 服务器, 前端, javascript

前言

WebBrowser 作为Delphi 常见的网络浏览控件,我这里整理了一些它的基本操作,遇到了一些问题,我梳理了一下并给出解决方案

基本操作

WebBrowser1.GoHome; //到浏览器默认主页
WebBrowser1.Refresh; //刷新
WebBrowser1.GoBack; //后退
WebBrowser1.GoForward; //前进
WebBrowser1.Navigate(‘…’); //打开指定页面
WebBrowser1.Navigate(‘about:blank’); //打开空页面

WebBrowser1.Navigate(‘about:标题>页面内容’);//打开空页面, 并写入…

常见问题与解决方案

读取网页脚本中的变量

假如网页中有这样的语句:

procedure TForm1.Button1Click(Sender: TObject);?
var?
s: string;?
i: Integer;?
begin?
s := WebBrowser1.OleObject.document.Script.str;?
i := WebBrowser1.OleObject.document.Script.num;?
ShowMessage(s); //Hello?
ShowMessage(IntToStr(i)); //99?

//也可以这样读:?
s := WebBrowser1.OleObject.document.parentWindow.str;?
i := WebBrowser1.OleObject.document.parentWindow.num;?
ShowMessage(s); //Hello?
ShowMessage(IntToStr(i)); //99?
end;?

调用网页脚本中的函数

假如有这样的脚本:

procedure TForm1.Button1Click(Sender: TObject);?
begin?
WebBrowser1.OleObject.document.parentWindow.MB(); //HTML-Js?

//如需指定脚本语言, 需要:?
WebBrowser1.OleObject.document.parentWindow.execScript('MB()','JavaScript'); //HTML-Js?
end;?

判断网页及内部框架网页是否全部下载完毕

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;?
const pDisp: IDispatch; var URL: OleVariant);?
begin?
if WebBrowser1.Application = pDisp then?
begin?
Text := '网页下载完毕!';?
end;?
end;?

改变背景色或背景图片

WebBrowser1.OleObject.document.body.bgcolor := ‘#FF0000’;
WebBrowser1.OleObject.document.body.background := ‘…图片地址’;

操作有 ID 标签的对象

假如网页中有这样的内容:
这是 span1 标签中的内容

var
s: string;
begin
s := WebBrowser1.OleObject.document.getElementByID(‘span1’).innerText;
ShowMessage(s); //这是 span1 标签中的内容

//或者:
s := WebBrowser1.OleObject.document.parentWindow.span1.innerText;
ShowMessage(s); //这是 span1 标签中的内容

//隐藏它:
WebBrowser1.OleObject.document.parentWindow.span1.style.display := ‘none’;
end;

获取网页源代码

var
s: string;
begin
s := WebBrowser1.OleObject.document.body.innerHTML; //body内的所有代码
s := WebBrowser1.OleObject.document.body.outerHTML; //body内的所有代码, 包含body标签
s := WebBrowser1.OleObject.document.documentElement.innerHTML; //html内的所有代码
end;

WebBrowser 中的右键菜单

//先要添加ApplicationEvents1,指定其Message事件

//屏蔽右键菜单
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
with Msg do
begin
if not IsChild(WebBrowser1.Handle, hWnd) then Exit;
Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
end;
end;

//替换右键菜单
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var mPoint: TPoint;
begin
if IsChild(WebBrowser1.Handle, Msg.Hwnd) and
((Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_RBUTTONUP)) then
begin
GetCursorPos(mPoint); //得到光标位置
PopupMenu1.Popup(mPoint.X, mPoint.Y); //弹出popupmenu1的菜单
Handled:=True;
end;
end;

新页面写入

begin
WebBrowser1.Navigate(‘about:blank’);
WebBrowser1.OleObject.Document.Writeln(‘ok’);
end;

获取页面全部链接

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var 
i: Integer;
begin


webbrowser1.Navigate(edit1.Text);

end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
i:integer;
begin
for i := 0 to Webbrowser1.OleObject.Document.links.Length - 1 do
Listbox1.Items.Add(Webbrowser1.OleObject.Document.Links.Item(i));
end;

end.

获取网页的验证码

方式1:

procedure TForm1.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
jpg:TJpegImage;
vp:string;
begin
ms:=TMemoryStream.Create;
jpg:=TJpegimage.Create;
vp:='http://ptlogin2.qq.com/getimage?aid=22';
//vp:='http://www.0zer.cn/function/c_validcode.asp?name=loginvalid';
IdHTTP1.Get(vp,ms);
ms.Position:=0;
jpg.LoadFromStream(ms);
image1.Picture.Assign(jpg);

ms.Free;
jpg.free;

END;

方式2:

unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, 
  StdCtrls, jpeg, GIFImage, WinInet; 
 
type 
  TForm1 = class(TForm) 
    IdHTTP1: TIdHTTP; 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
procedure TForm1.Button1Click(Sender: TObject); 
const 
 // url = 'http://ptlogin2.qq.com/getimage?aid=15000701&0.9129723031485226'; 
  url='http://www.0zer.cn/function/c_validcode.asp?name=loginvalid'; 
var 
  ms: TMemoryStream; 
  //jpg: TJPEGImage; 
  te: TGIFImage; 
begin 
  ms := TMemoryStream.Create; 
  //jpg := TJPEGImage.Create; 
    te:=TGIFImage.Create; 
   if InternetGetConnectedState(nil,0) then    //检测计算机是否联网需要引用WinInet 
   begin 
     IdHTTP1.Get(url, ms); 
     ms.Position := 0; 
 
    //jpg.LoadFromStream(ms); 
     te.LoadFromStream(ms); 
     Canvas.Draw(10, 10, te); 
   end 
   else 
   begin 
     ShowMessage('错误'); 
     //jpg.Free; 
     te.Free; 
     ms.Free; 
   end; 
end; 
end.

http://www.niftyadmin.cn/n/5797678.html

相关文章

单片机:实现音乐播放器(附带源码)

单片机实现音乐播放器 在许多嵌入式系统中,音乐播放器是一个常见的应用,尤其是在需要音频输出的智能设备中。通过单片机控制音乐播放设备,可以实现简单的音频播放、音效控制以及其他交互功能。常见的应用场景包括玩具、智能家居设备、嵌入式…

NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU NodeMCU开发板 此NodeMCU是在乐鑫公司(Espressif Systems)生产的ESP-12F模组的基础上封装好的具备WiFi功能的开源IoT开发板。本次选用安信可公司(Ai-Thinker)生产的CP2102版本的开发板。 28BYJ-48型步进电机 28BYJ-48型…

docker怎么部署高斯数据库

部署高斯数据库(openGauss)到Docker的步骤如下: 安装Docker: 如果您的系统尚未安装Docker,需要先进行安装。以CentOS为例,可以使用以下命令安装Docker: yum install -y docker拉取镜像&#xff…

通航飞机(通用航空飞机)的软件关键技术

通航飞机(通用航空飞机)的软件关键技术主要聚焦于确保飞行安全、提升操作效率以及优化用户体验等核心目标,这些技术涵盖了诸多重要领域,从软件层面来看,各个技术领域均有着独特的实现方式与关键作用,以下将…

ubuntu服务器配置IP

目录 配置服务器IP1、查看网卡名称2、编辑Netplan配置文件3、添加静态ip配置4、应用 Netplan 配置5、验证配置 配置服务器IP 1、查看网卡名称 ip a通常会显示类似 ens33、ens34、eth0 等网卡名称。 2、编辑Netplan配置文件 vim /etc/netplan/00-installer-config.yaml3、添…

Linux扩展——shell编程

前置&#xff1a;Linux基础及命令复习 目录 shell概述Shell脚本入门案例 sh bash ./ . source 变量系统预定义变量 $HOME $PWD $SHELL等自定义变量 unset readonly补充&#xff1a;开启子Shell进程的常见方法 (...) $(...) ... <(...) >(...) 特殊变量 $n $# $* $ $&…

VScode在远程服务器上安装Anaconda并确认安装成功的步骤

1.在Anaconda官网下载安装包&#xff0c;在终端输入 wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh 2.安装Anaconda&#xff0c;在终端输入 bash Anaconda3-2024.06-1-Linux-x86_64.sh 3.不断按回车键&#xff0c;直到 输入yes 4.输入 no…

探秘“香水的 ChatGPT”:AI 开启嗅觉奇幻之旅!

你没有看错&#xff0c;AI也能闻到味道了&#xff01;这是一家名为Osmo公司公布的信息&#xff0c;他们成功创造出了由AI生成的李子味道&#xff0c;快跟着小编一探究竟吧~ 【图片来源于网络&#xff0c;侵删】 Osmo公司的这项技术&#xff0c;通过分析香味的化学成分和人类嗅…