CppWebBrowser捉網頁源碼遇到很怪的問題 求救各位神人~~
我參考版上其他人的寫法 寫了一個代碼
此代碼作用在先用CppWebBrowser1開啟網頁後
再更新日期並送出查循
再接下來 捉出想要的源碼
但碰到很怪的問題 我不管怎樣弄
明明CppWebBrowser1已經送出查詢了
但我捉下來都是舊的資料(未更新前)
我也試過版上其他文章有關"判定網頁讀取完畢"的寫法
但還是都沒用.....
後來我發現 我要是把最後捉源碼的部分 另外寫在一個Button
先跑完底下的程式 再手動去點 Button 卻可以捉出最新的源代碼
所以想請教各位先進 我是那沒有釋放掉嗎?
要如何修改呢? 很急阿 麻煩各位幫幫忙 我已經弄了好幾天了
Memo1->Clear();
int status=1,status2=1;
String URL="http://www.cnyes.com/twstock/ps_historyprice/2498.htm";
webdone=false;
CppWebBrowser1->Navigate(URL.c_str());
while(!webdone){
Sleep(500);
Application->ProcessMessages();
}
CoInitialize(NULL); //--- 初始化 COM ---//
VARIANT id, index,id1,index1;
IDispatch *spDispatch;
IHTMLDocument2 *pDoc;
IHTMLElement *pElement;
IHTMLElementCollection *pElementCol;
IHTMLFormElement *pFormElement;
IHTMLInputElement *pInputElement;//Input
//IDispatch *WebDocument=static_cast<IDispatch*>(CppWebBrowser1->Document);
//pDoc=static_cast<IHTMLDocument2*>(WebDocument); //首先獲取IWebBrowser2接口
if(SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc)))
{
if (SUCCEEDED(pDoc->get_forms(&pElementCol))) //得到form
{
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p))) //哪一個form
{
if(p!=0)
{
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
long q=0;
if(SUCCEEDED(pFormElement->get_length(&q))) //得到form中的控件個數
{
for(long j=0;j<=(q-1);j++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = j;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputElement,(void**)&pInputElement)))
{
//BSTR Value;
//BSTR Type;
BSTR Id;
//BSTR Name;
//pInputElement->get_type(&Type); //獲取類型
//pInputElement->get_value(&Value); //獲取值
pElement->get_id(&Id);//獲取Id的方法不一樣
//pInputElement->get_name(&Name); //獲取它的名字
//Memo1->Lines->Add("Id+Name");
AnsiString tempId;
tempId = AnsiString(Id);
Memo1->Lines->Add(tempId);
if(tempId!=NULL && ((tempId.Trim()).Length()>0))
{
//tempName = AnsiString(Type);
if(tempId == "ctl00_ContentPlaceHolder1_startText") //--- 開始日期 ---//
{
pInputElement->put_value(L"2002/01/01");
Memo1->Lines->Add("pInputElement->put_value");
}
else if(tempId == "ctl00_ContentPlaceHolder1_submitBut") //--- 提交查詢 ---//
{
pElement->click();
break;
}
//break;
}//如果不符,則不做處理
pInputElement->Release();
}
pElement->Release();
}//if pelement
spDispatch->Release();
}
}
pFormElement->Release();
}
}
spDispatch->Release();
}
}
}
}
//if(pDoc)
pDoc->Release();
}
}
Sleep(2000);
//--- 底下捉出源碼 ---//
IHTMLDocument2 *document;
if(SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&document))){
IHTMLElement *html;
BSTR title,source,content,lang;
document->get_title(&title); //取title
document->get_body(&html);
html->get_outerHTML(&source);//取源程序
Memo1->Clear();
Memo1->Lines->Add(source);
}
CoUninitialize();
}