delphi WebBrowser的使用方法详解,五-难点释疑

http://blog.csdn.net/xtfnpgy/article/details/15809635

网页代码:<SELECT id=fy onchange=TouchRefresh(1) name=fy> <OPTION selected value=15>每頁顯示15筆</OPTION> <OPTION value=30>每頁顯示30筆</OPTION> <OPTION value=60>每頁顯示60筆</OPTION></SELECT>

1.webbrowser执行网页中的JS函数

如果要执行TouchRefresh(1)函数:

webbrowser1.oleobject.document.parentwindow.ExecScript(‘TouchRefresh(1)’,'Javascript');

webbrowser执行自己的JS函数:

wb1.OleObject.document.parentwindow.ExecScript('alert(''自定义函数');','javascript');

方法2:

wb1.Navigate('javascript:alert(''执行成功!'');');

2.webbrowser选择下拉列表

var

ole : olevariant

begin

ole := webbrowser1.oleobject.document.GetElementByID('fy');

ole.value := 60; //下拉框用value,复选框和多选框用checked:='true'

ole.onchange; //调用onchange事件

end;

3.webbrowser按照Form提交(针对提交按钮无id和name的情况)

网页代码:

<FORM return validate_form()" method=post action=/pass/serviceLoginAuth2><INPUT id=passToken type=hidden name=passToken>

<INPUT input_kuang item errortip" name=user>

<INPUT input_kuang item errortip" value="" type=password name=pwd>

<DIV class="sub_login flt_l"><INPUT class="no_bg" value=登入 type=submit></DIV>

提交方法:

webbrowser1.OleObject.document.forms.item('loginForm').submit;

4.webbrowser去掉滚动条

在download事件中:

webbrowser1.oleobject.Document.body.Scroll := 'no';

webbrowser1.oleobject.Document.documentElement.style.overflow := 'hidden';

webbrowser控制滚动条滚动:

webbrowser1.OleObject.document.parentwindow.scrollby(0,100);//第一个参数横向,第二个竖向 scrollby滚动多少

webbrowser1.OleObject.document.parentwindow.scrollto(0,1000);// scrollto滚动到某个位置

5.webbrowser屏蔽鼠标右键 TEmbeddedWB设置DisabledPopupMenuItems属性

webbrowser1.DisabledPopupMenuItems := [rcmDefault,rcmImage,rcmControl,rcmTable,rcmSelText,rcmAnchor,rcmUnKnown,rcmImageArt,rcmImgDynSrc,rcmDebug,rcmAll]

6.webbrowser屏蔽网页图片 TEmbeddedWB设置DownloadImages属性

webbrowser1.DownloadOptions := [];

7.webbrowser按照元素的属性获取元素

function GetDocLinkByHref(doc : IHTMLDocument2;str_url:string):IHTMLAnchorElement;

var

i : Integer;

label_iDispatch : iDispatch;

label_element : IHTMLAnchorElement; //引用mshtml

begin

Result := nil;

doc := webbrowser1.document as Ihtmldocument2;

if not Assigned(doc) then

Exit;

for i:=0 to doc.links.length-1 do

begin

label_iDispatch := doc.links.item(i,0);

label_element := doc.links.item(I,0) as IHTMLAnchorElement;

if (AnsiPos(str_url,(doc.links.item(I,0) as IHTMLElement).getAttribute('tag',0))>0)

then

begin

Result := label_element;

Break;

end;

end;

end;

8.webbrowser TEmbededwb屏蔽弹窗并捕获弹窗信息 //在 TEmbededwb的OnShowMessage事件中处理

procedure TForm1.wb1NavigateComplete2(Sender: TObject;

const pDisp: IDispatch; var URL: OleVariant);

VAR

str_url : string;

begin

Wb1.OleObject.document.parentWindow.execScript('window.alert=null;','JavaScript');

Wb1.OleObject.document.parentWindow.execScript('window.open=null;','JavaScript');

Wb1.OleObject.document.parentWindow.execScript('window.close=null;','JavaScript');

Wb1.OleObject.document.parentWindow.execScript('window.showModalDialog=null;','JavaScript');

Wb1.OleObject.document.parentwindow.execscript('function confirm() {return true;}','Javascript');

end;

function TForm1.webbrowser1ShowMessage(Sender: TObject; HWND: Cardinal; lpstrText, lpstrCaption: PWideChar; dwType: Integer; lpstrHelpFile: PWideChar;

dwHelpContext: Integer; var plResult: Integer): HRESULT;

begin

plResult := IDOK; //屏蔽alert\open\close等弹窗

Result := S_OK; //屏蔽confirm确认框,并点击确认

mmo1.Lines.Add(lpstrText); //lpstrText即为捕获到的弹窗内容

end;

屏蔽WebBrowser页面中的声音

procedure CloseSound;

var

hWinmm: Cardinal;

pwaveOutWrite: Pointer;

lp: Cardinal;

begin

hWinmm := LoadLibrary('Winmm.dll');

if hWinmm > 0 then

pwaveOutWrite := GetProcAddress(hWinmm, 'waveOutOpen');

if pwaveOutWrite <> nil then begin

VirtualProtect(pwaveOutWrite, 3, PAGE_EXECUTE_READWRITE, lp);

Move(#$C2#$18#$00, pwaveOutWrite^, 3);

end;

end;

//强制Webbroser使用IE8内核 SetWBCoreIE8(8000);

procedure SetWBCoreIE8(i_value:Integer);

var

str_exeName : string;

reg : TRegistry;

begin

try

str_exeName := RightFromStr(Application.ExeName,'\',False);

reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE;

if reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl', False) then

begin

if not reg.KeyExists('FEATURE_BROWSER_EMULATION') then

reg.CreateKey('FEATURE_BROWSER_EMULATION');

end;

reg.CloseKey;

if reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION', False) then

begin

reg.WriteInteger(str_exeName,i_value);

// if not reg.ValueExists(str_exeName) then

// begin

// reg.WriteInteger(str_exeName,i_value);

// end;

end;

reg.CloseKey;

reg.Free;

except

end;

end;

最后奉献以前收集的关于WB的文章链接:

Delphi Webbrowser

delphi 模拟自动登录网页webbrowser
delphi webbrowser查找对象实现自动登录_
delphi webbrowser与delphi互动 !!!
WebBrowser组件和MSHTML 在Delphi中的使用Delphi
delphi中Webbrowser - Max Woods - 博客园
WebBrowser组件和MSHTML 在Delphi中的使用
webbrowser轻松实现自动填表
WebBrowser 操作记要 - 万一 - 博客园
delphi中Webbrowser的使用技巧 - wystec的日志 - 网易博客
delphi webbrowser 遍历网页元素
Delphi7 Webbrowser制作网页表单自动提交器按步分析(1) - 中星9号 - 博客园
delphi中如何在多线程环境下操作webbrowser控件
delphi利用webservise登陆百度
VB WebBrowser 为页面添加代码的方法_百度知道
关闭webbrowser的弹出框(对话框
Delphi中WebBrowser(或者EmbeddedWebBrowser)控件打开部分网站报“Invalid floating point operation”异常的解决方法 - XuXn - 博客园
Delphi中webbrowser的document 对象的属性方法事件_硬软兼得博客_新浪博客
Delphi获取句柄并发送消息
delphi WebBrowser获取iframe页面内容
Twebbrowser如何写多线程? - Delphi _ 网络通信_分布式开发
【发现】如何屏蔽掉WebBrowser在刷新网页等时候发出的声音 - Boringlamb - 博客园
对ExtendedWebBrowser的再扩展(续)_呼吸空间_百度空间
接收IWebBrowser2的自动化事件_My_百度空间
delphi WebBrowser 开发浏览器_SAP学习_abap_百度空间
【转】WebBrowser的Cookie操作(与CookieContainer的关系)_奎宇工作室_百度空间
蓝鸟-Delphi的WebBrowser改造,对网页中Alter等对话框的改造方法(转载)
如何找到webbrowser打开网页中flash的接口?能否用这个接口控制flash的播放?_VC高级研究_积木群组
webBrowser获取网页flash句柄模拟单击的问题 - .NET技术 _ C#
VB 如何向 WebBrowser1 中的flash发送左边点击事件 - VB _ 网络编程
用WebBrowser实现HTML界面的应用
扩展 WebBrowser 控件 DragWebBrowser FlashGameWebBrowser_C# 视角_CS程序员之窗
WebBrowser 设置代理(100分) - Delphi _ 网络通信_分布式开发
屏蔽WebBrowser页面中传出来的声音 - jxgxy - 博客园
可以对同一个程序中的多个WebBrowser设置不用的代理服务器吗?
本地:双线路、双IP、双网卡 设置上网_我是谁?—Andy Gu_百度空间
Delphi中使用EmbeddedWB屏蔽指定内容的网页对话框 - Patrick Pullman - 博客园
Web Browser Control – Specifying the IE Version - Rick Strahl's Web Log
WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下? - BobLiu - 博客园
WebBrowser 中,无法释放内存? - CSDN论坛 - CSDN.NET
为什么浏览器会使用多进程架构。 - ithzhang - 博客频道 - CSDN.NET
Windows 消息 - 万一 - 博客园
【WebBrowser】多进程编程(一) - dick_china的专栏 - 博客频道 - CSDN.NET
如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式 - IE浏览器研发 !!
用Tchromium替换webbrowser - Bach - 博客园
webBrowser 控制select 下拉列表_风月无边_百度空间
html中下拉列表框中的全部属性 - 已解决 - 搜搜问问
Delphi编写 修改Cookie的浏览器
TEmbeddedWB Component - EmbeddedWB - bsalsa forum
webBrowser获取网页flash句柄模拟单击的问题 - CSDN论坛 - CSDN.NET

支持原创,转载请注明出处!

procedure CloseSound;

var

hWinmm: Cardinal;

pwaveOutWrite: Pointer;

lp: Cardinal;

begin

hWinmm := LoadLibrary('Winmm.dll');

if hWinmm > 0 then

pwaveOutWrite := GetProcAddress(hWinmm, 'waveOutOpen');

if pwaveOutWrite <> nil then begin

VirtualProtect(pwaveOutWrite, 3, PAGE_EXECUTE_READWRITE, lp);

Move(#$C2#$18#$00, pwaveOutWrite^, 3);

end;

end;