Хочу использовать этот компонет BCB для постинга данных, перерыл инет и нашёл такой код для BCB для постинга
String sURL = "http://127.0.0.1/cgi-bin/login";
String sPostData = "login=name&psw=password";
BSTR bstrHeaders = NULL;
TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
LPSAFEARRAY psa;
LPCTSTR cszPostData = sPostData.c_str();
UINT cElems = lstrlen(cszPostData);
LPSTR pPostData;
LPVARIANT pvPostData;
WideString Head = "Content-Type: application/x-www-form-urlencoded\r\n"
"Accept-Language: ru\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Referer: http://127.0.0.1/login.htm\r\n";
bstrHeaders = SysAllocString(Head);
if (!bstrHeaders){
Application->MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
return;
}
V_VT(&vHeaders) = VT_BSTR;
V_BSTR(&vHeaders) = bstrHeaders;
pvPostData = vPostData;
if(pvPostData){
VariantInit(pvPostData);
psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if(!psa){
return;
}
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, cszPostData, cElems);
SafeArrayUnaccessData(psa);
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;
}
CppWebBrowser->Navigate((TVariant)sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
Этот код прекрасно работает и спасибо тому, что его написал.
Однако далее надо обработать текст открытой страницы... Вот тут и начинаются проблемы, т.к. хелпа ко этому компоненту нет, а в msdn я что-то непонял... Вроде всё коды что надо я нашёл, только они на Delphi, помогите с их переводом на BCB.
Вот что надо:
Организация доступа для загрузки страничек в CppWebBrowser через прокси:
var PIInfo : PInternetProxyInfo ;
begin
New (PIInfo) ;
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ;
PIInfo^.lpszProxy := PChar('200.197.101.194:80');
PIInfo^.lpszProxyBypass := PChar('');
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0);
WebBrowser1.Navigate(Edit1.Text);
Dispose (PIInfo) ;
end;
Получение полного исходника HTML
var
HTMLDocument: IHTMLDocument2;
PersistFile: IPersistFile;
begin
...
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
PersistFile.Save(StringToOleStr('test.htm'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
...
end;
или
while WB.Document = nil do Application.ProcessMessages;
Document:= WB.Document as IHtmlDocument2;
Text:= Document.body.InnerHTML;
Заполнение полей формы открытой страницы и нажатие на кнопку
Web.OleObject.Document.all.tags('FORM').item(0).item('To').value:='username';
Web.OleObject.Document.all.tags('FORM').item(0).item('textfield_password\').value:='password';
Web.OleObject.Document.all.tags('FORM').item(0).item('submit_button_name\').click();
Блокировка загрузки картинкок, НЕЗАВИСИМО от настроек Internet Explorera
IDocHostUIHandler.FilterDataObject
Помогите, Plz, с переводом, т.к. простой посточный пенес не работает...
(
Здравствуйте HighTower, Вы писали:
HT>Помогите, Plz, с переводом, т.к. простой посточный пенес не работает... (
Вот код для доступа к тексту страницы
#include <mshtml.h>
void __fastcall TfrmMain::tsHtmlCodeShow( TObject *Sender )
{
if ( CppWebBrowser->Busy )
return ;
IHTMLDocument2 *HTMLDocument = NULL;
IPersistFile *PersistFile = NULL;
if ( CppWebBrowser->Document && SUCCEEDED( CppWebBrowser->
Document->
QueryInterface( IID_IHTMLDocument2, ( LPVOID* ) & HTMLDocument ) ) ) {
if ( SUCCEEDED( HTMLDocument->QueryInterface( IID_IPersistFile,
( LPVOID* ) & PersistFile ) ) ) {
PersistFile->Save( WideString( String( ExtractFilePath( ParamStr( 0 ) ) +
"temp.html" ) ), true );
PersistFile->Release();
}
HTMLDocument->Release();
reHtmlCode->Lines->LoadFromFile( String( ExtractFilePath( ParamStr( 0 ) ) +
"temp.html" ) );
}
}
}
Еще можно почитать
здесь.
Здравствуйте HighTower, Вы писали:
HT>Здравствуйте Holms, Вы писали:
H>>Вот код для доступа к тексту страницы
HT>Большое спасибо — помогли!!!
HT>А гдеб ещё помно было почитать?
Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел.
Здравствуйте Holms, Вы писали:
H>Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел.
Прискорбно...
Я тут вот на что наткрулся, как получить текст страницы:
CComPtr <IDispatch> pDisp;
CppWB->ControlInterface->get_Document(&pDisp);
CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
spHTML = pDisp;
WideString A;
spHTML.p->get_readyState(&A);
ShowMessage(A);
CComPtr <IHTMLElement> m_pBody;
spHTML->get_body(&m_pBody);
BSTR bstrHTMLText;
m_pBody->get_outerHTML(&bstrHTMLText);
ShowMessage(bstrHTMLText);
Если б знать что такое IHTMLElement, IHTMLDocument2 и т.д., то можно было бы всё сделать... Однако ничего не понятно...
Здравствуйте HighTower, Вы писали:
HT>Здравствуйте Holms, Вы писали:
H>>Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел. :(
HT>Прискорбно...
HT>Я тут вот на что наткрулся, как получить текст страницы:
HT>HT>CComPtr <IDispatch> pDisp;
CppWB->>ControlInterface->get_Document(&pDisp);
HT>CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
HT>spHTML = pDisp;
HT>WideString A;
spHTML.p->>get_readyState(&A);
HT>ShowMessage(A);
HT>CComPtr <IHTMLElement> m_pBody;
spHTML->>get_body(&m_pBody);
HT>BSTR bstrHTMLText;
m_pBody->>get_outerHTML(&bstrHTMLText);
HT>ShowMessage(bstrHTMLText);
HT>
HT>Если б знать что такое IHTMLElement, IHTMLDocument2 и т.д., то можно было бы всё сделать... Однако ничего не понятно... :(
Это просто интерфесы для элементов HTML. Про это в MSDN написсано.
Здравствуйте HighTower, Вы писали:
HT>Здравствуйте Holms, Вы писали:
H>>Это просто интерфесы для элементов HTML. Про это в MSDN написсано.
HT>Если не затруднит, то можно точную ссылочку где про них написано? а то у меня поиск не работает по msdn из-за внешнего firewall'а...
здесь