作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Internet Explorer 中,我可以使用 IHtmlDocument2 来获取 html 文档。
function GetCurrentBrowserDOM: WideString;
var
hr: HRESULT;
CurrentIE: IWebbrowser2;
Wnd: HWND;
WndChild:HWND;
document: IDispatch;
RootNode: IHTMLDocument2;
innerHtml: WideString;
begin
Result := '';
Wnd := GetForegroundWindow;
WndChild := FindWindowEx(Wnd, 0,'Frame Tab', nil);
WndChild := FindWindowEx(WndChild, 0,'TabWindowClass', nil);
WndChild := FindWindowEX(WndChild, 0, 'Shell DocObject View', nil);
WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);//find Internet
CoInitialize(nil);
try
hr := GetIEFromHWND(WndChild, CurrentIE);
if hr = S_OK then
begin
document := CurrentIE.Document;
document.QueryInterface(IID_IHTMLDocument2, RootNode);
innerHtml := RootNode.body.innerHTML;
end;
finally
CoUninitialize;
end;
end;
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
type
TObjectFromLResult = function(LRESULT: LRESULT; const IID: TGUID; wParam: WPARAM; out PObject): HRESULT; stdcall;
var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
hInst := LoadLibrary('Oleacc.dll');
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
if @ObjectFromLresult <> nil then begin
try
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
Result := GetLastError;
if Result = S_OK then
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
finally
FreeLibrary(hInst);
end;
end;
Wnd := GetForegroundWindow;
WndChild := FindWindowEx(Wnd, 0, 'Chrome_WidgetWin_0', nil);
WndChild := FindWindowEx(WndChild, 0, 'Chrome_RenderWidgetHostHWND', nil);
WndChild := FindWindowEx(WndChild, 0, 'CompositorHostWindowClass', nil);
ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
最佳答案
这是不可能的,IHtmlDocument2 是仅在 IE 托管对象中支持的接口(interface),Chrome 中使用的 WebKit 引擎不支持它。但是,您可以使用 MSAA 访问元素,但您需要先启用辅助功能:http://www.chromium.org/developers/design-documents/accessibility
或者您也可以通过远程调试协议(protocol)访问 DOM:https://developers.google.com/chrome-developer-tools/docs/protocol/1.0/index
关于google-chrome - 如何在 chrome 浏览器中获取 IHtmlDocument2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073532/
我是一名优秀的程序员,十分优秀!