如何用TIdHTTP呼叫JavaScript? |
缺席
|
melticemelt
一般會員 發表:22 回覆:29 積分:10 註冊:2002-10-01 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=62626
之前po在這邊的文章 目前我已經用TCppWebBrowser試成功了,可是我希望能用TIdHTTP來做會比較精簡。 問題就出在它的Form在Submit之前會先call一段JavaScript,該Script會去call一段cab檔內的function,然後return回來的值在當做Post的參數傳過去,所以我也沒辦法模仿JavaScript的code自己寫,除非有辦法直接call cab檔的function,請問有辦法嗎? 就算用TCppWebBrowser直接Submit也不行,一定要先執行該Script再Submit才行。 程式碼如下(就是執行Script然後Submit)
請問有辦法改成Indy嗎?
或是有更簡單的方式可以達到相同的Automation嗎?
這程式碼真是太複雜了
(剪貼來的,其實我也不太懂這些東西)
void Test1(TCppWebBrowser* IE) { IHTMLDocument2 *HTMLDocument = NULL; if(SUCCEEDED(IE->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)) && HTMLDocument) { IHTMLElementCollection *HTMLForms = NULL; if(SUCCEEDED(HTMLDocument->get_forms(&HTMLForms)) && HTMLForms) { TVariant vName = "TAIMEX";//確定下單Form name TVariant vIndex = 0; IDispatch *pDisp = NULL; if(SUCCEEDED(HTMLForms->item(vName, vIndex, &pDisp)) && pDisp) { IHTMLFormElement *HTMLForm = NULL; if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,(LPVOID*)&HTMLForm)) && HTMLForm) { //////////////////////////////// //test - execute javascript VARIANT varRes; HRESULT hr; IHTMLWindow2* pWindow2;//should i release this later?? hr = HTMLDocument->get_parentWindow(&pWindow2); VariantInit(&varRes); BSTR scriptCode = L"check_double_click()"; BSTR scriptLang = L"JavaScript"; hr = pWindow2->execScript(scriptCode, scriptLang, &varRes); VariantClear(&varRes); //////////////////////////////// //do execScript before submit HTMLForm->submit(); HTMLForm->Release(); } pDisp->Release(); } HTMLForms->Release(); } HTMLDocument->Release(); }//end if(HTMLDocument) } |
melticemelt
一般會員 發表:22 回覆:29 積分:10 註冊:2002-10-01 發送簡訊給我 |
因為已經得到要Post出去的值(沒想到竟然是個固定值!?)
所以已經可以用TIdHTTP成功下單 首先Install ActiveX Components把它下單網頁JavaScript使用到的元件安裝到BCB,新增一個程式call該function,把return值存到一個文字檔。OK~~ 目前發現世華,日盛其實都是用同一個元件 程式碼模仿JavaScript寫的
const int FSCAPI_FLAG_SELCERT_MANUAL = 0x00000001; const int FS_FLAG_DETACHMSG = 0x00004000; const int FSCAPI_FLAG_SELCERT_AUTO = 0x00000002 ; const int FSCAPI_FLAG_SELCERT_AFTER = 0x00000004 ; const int FSCAPI_FLAG_SELCERT_CHECKVALID = 0x00000010 ; const int FS_FLAG_CERT_ATTACHALL = 0x00000200; wchar_t *msgg=L""; wchar_t *Criterial = L"SN=XXXXXXXXX"; WideString ss = cab->FSCAPISign(msgg , Criterial , FSCAPI_FLAG_SELCERT_CHECKVALID|FSCAPI_FLAG_SELCERT_AUTO, 0); TMemoryStream *ms = new TMemoryStream; AnsiString as = WideToAnsi(ss); ms->Write(as.c_str(),as.Length() 1);//save redundant \0 ms->SaveToFile("Criterial.txt"); delete ms; |
shukaihuang
一般會員 發表:1 回覆:1 積分:0 註冊:2006-08-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |