有两个问题 请“凤之焚”兄进来看看,其大侠也可!

时间:2021-01-01 18:26:26
1)近期在用字符串遍历网页内容的时候发现了一些局限!有些网站的链接用的是脚本譬如:href= javascript:PageDown();这样的话我就取不到他的URL了!我的问题就是能知道他PageDown()所定制的URL吗?能最好,省事;不能,那就只能用接口来遍历了,应该还要模拟FORM的提交事件!最主要的是提交了以后能得到触发后的那个网页的文档指针吗?谢了。。。。

2) 还有就是关闭程序的时候总会报kernel32.dll的access violation的异常
WinMainCRTStartup()->exit()->doexit()->$E824()->
00425012   pop         edi
77E6B5AE   xadd        dword ptr [ecx],eax

请大侠请教!谢了。。。^_^

7 个解决方案

#1


1 You need to handle the document event in the result page.
2 check if you over-released a COM pointer

#2


蒋老大
第二个问题里面
我的指针应该都释放了啊
还有其他原因吗?

#3


我的指针应该都释放了啊
可能是释放多了啊,^_^

#4


1、试试通过IHTMLScriptElement得到JS中的URL
2、你可以试着用智能指针,以免忘记释放指针。

#5


那兄台帮我看看这段代码有啥问题啊?
         CComPtr<IHTMLDocument2>m_pDoc;
         HRESULT hr;
IHTMLWindow2* pHTMLWnd;
m_pDoc = (IHTMLDocument2*)GetHtmlDocument();
if (m_pDoc)
{
hr = m_pDoc->get_parentWindow(&pHTMLWnd);
if (hr == S_OK)
{
if (pHTMLWnd)
{
BSTR bstrCode = strCode.AllocSysString();
BSTR bstrLang = strLang.AllocSysString();
VARIANT vRet;
vRet.vt = VT_BOOL;
hr = pHTMLWnd->execScript(bstrCode,bstrLang,&vRet); //这里执行的HR显示的是错误,程序执行时提示脚本错误!
if (hr == S_OK)
{
AfxMessageBox(_T("run"));
}
else
{
AfxMessageBox(_T("error"));
}
SysFreeString(bstrCode);
SysFreeString(bstrLang);
}
}
}
if(pHTMLWnd != NULL) pHTMLWnd->Release();

请兄台帮我看看啊!!!!!!!!

#6


上面的问题已经解决
我用接口执行脚本 效果真的不错
呵呵
第一个问题:兄台你说的那个HTMLScriptElement取JS的URL
是用get_src还是get_htmlFor?
试过了都不行!

#7


m_pDoc = (IHTMLDocument2*)GetHtmlDocument();
this is an object leak
use 
CComQIPtr<IHTMLDocument2>m_pDoc;
IDispatch* pdisp=GetHtmlDocument();
m_pDoc = pdisp;

also check the ready state before you access the document

#1


1 You need to handle the document event in the result page.
2 check if you over-released a COM pointer

#2


蒋老大
第二个问题里面
我的指针应该都释放了啊
还有其他原因吗?

#3


我的指针应该都释放了啊
可能是释放多了啊,^_^

#4


1、试试通过IHTMLScriptElement得到JS中的URL
2、你可以试着用智能指针,以免忘记释放指针。

#5


那兄台帮我看看这段代码有啥问题啊?
         CComPtr<IHTMLDocument2>m_pDoc;
         HRESULT hr;
IHTMLWindow2* pHTMLWnd;
m_pDoc = (IHTMLDocument2*)GetHtmlDocument();
if (m_pDoc)
{
hr = m_pDoc->get_parentWindow(&pHTMLWnd);
if (hr == S_OK)
{
if (pHTMLWnd)
{
BSTR bstrCode = strCode.AllocSysString();
BSTR bstrLang = strLang.AllocSysString();
VARIANT vRet;
vRet.vt = VT_BOOL;
hr = pHTMLWnd->execScript(bstrCode,bstrLang,&vRet); //这里执行的HR显示的是错误,程序执行时提示脚本错误!
if (hr == S_OK)
{
AfxMessageBox(_T("run"));
}
else
{
AfxMessageBox(_T("error"));
}
SysFreeString(bstrCode);
SysFreeString(bstrLang);
}
}
}
if(pHTMLWnd != NULL) pHTMLWnd->Release();

请兄台帮我看看啊!!!!!!!!

#6


上面的问题已经解决
我用接口执行脚本 效果真的不错
呵呵
第一个问题:兄台你说的那个HTMLScriptElement取JS的URL
是用get_src还是get_htmlFor?
试过了都不行!

#7


m_pDoc = (IHTMLDocument2*)GetHtmlDocument();
this is an object leak
use 
CComQIPtr<IHTMLDocument2>m_pDoc;
IDispatch* pdisp=GetHtmlDocument();
m_pDoc = pdisp;

also check the ready state before you access the document