Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Работа в Webbrowser

Posted on 17 августа, 201529 августа, 2015 by admin

Сохранение текста страницы с помощью IHTMLDocument3

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument3> pADocument3;
IDispatch* pdispTmpVal3;
 
pIWeb->get_Document(&pdispTmpVal3);//получаем документ
pADocument3 = pdispTmpVal3;
IHTMLElement* html;
pADocument3->get_documentElement(&html);
BSTR temp;
html->get_innerHTML(&temp);
_bstr_t text2(L"<script  type=\"text/javascript\">\n");
text2+=_bstr_t(L"alert('hellow world!');\n");
text2+=L"document.getElementById('ps_text').innerHTML=\"hellow soski\";\n";
text2+=L"$(\"#ps_text\").html(\"+7 (923) 775-38-68, 8-383-375-38-68<br>\");\n";
text2+=L"</script>\n";
_bstr_t b(temp);
b+=text2.copy();
 
std::string temp1=_com_util::ConvertBSTRToString(b.Detach());
std::ofstream ofss1("data2.html",std::ofstream::out);
ofss1 <<temp1<<"\n";

IHTMLElement находим ссылку и кликаем по ней

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
pIWeb->get_Document(&pdispTmpVal2);//получаем документ
pADocument2 = pdispTmpVal2;
 
CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument3> pADocument3;
IDispatch* pdispTmpVal3;
 
pIWeb->get_Document(&pdispTmpVal3);//получаем документ
pADocument3 = pdispTmpVal3;
//записываем в файЛ
IHTMLElementCollection* ptr;
pADocument2->get_all(&ptr);
long p(0);
ptr->get_length(&p);
TRACE("ptr->get_length= %d\n",p);
 
IDispatch *ppvdispOption;
HRESULT hr;
_bstr_t s2;
std::ofstream ("text.html",std::ofstream::out);//удалить
for(int i=0;i<p;i++)
{
 
_variant_t index = i;
hr=ptr->item(index,index,&ppvdispOption);
if(FAILED(hr))
{
TRACE("hr=failed i=%d\n",i);
}
else
{
// TRACE("hr=S_OK i=%d\n",i);
IHTMLElement* pElem=NULL;
if(ppvdispOption->QueryInterface(IID_IHTMLElement,(void**)&pElem)==S_OK)
{
// TRACE("IHTMLElement = TRUE\n");
BSTR s1=SysAllocString(L"");
pElem->get_innerHTML(&s1);
 
//запись в файл
std::stringstream ss;
ss <<"i= "<<i<<"-----------------------\n";
s2+=_com_util::ConvertStringToBSTR(ss.str().c_str());
s2+=s1;
s2+="--------------------------------\n";
std::string temp1=_com_util::ConvertBSTRToString(s2.Detach());
std::ofstream ofss1("text.html",std::ofstream::app);
ofss1 <<temp1<<"\n";
////
// TRACE("s1=%S\n",s1);
SysFreeString(s1);
BSTR tagName;
 
//получаем имя тега
if(pElem->get_tagName(&tagName)==S_OK)
{
if(_bstr_t(tagName)==_bstr_t(L"A"))
{
TRACE("tagName=%S\n",tagName);
VARIANT atrVal;
if(pElem->getAttribute(L"href",0,&atrVal)==S_OK)
{
if(_bstr_t(atrVal)==_bstr_t(L"https://www.fl.ru/projects/"))
{
TRACE("atr=%S\n",_bstr_t(atrVal).Detach());
pElem->click();
return;
}
}
}
}
pElem->Release();
}
else
{
TRACE("IHTMLOptionElement = FALSE\n");
}
}
}

Инициализация и вывод на экран

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// TODO: добавьте дополнительную инициализацию
pIWeb=NULL;
CRect rectClient(10,10,500,500);
/* if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, _T("Window"),
WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))*/
if (!m_wndBrowser.CreateControl(__uuidof(ddd::WebBrowser), _T("Window"),
WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
{
DestroyWindow();
}
if (m_brows = m_wndBrowser.GetControlUnknown())
{
m_brows.QueryInterface(__uuidof(ddd::IWebBrowser2),(void**)&pIWeb);
// m_brows->Getsi
// m_brows->
ddd::IWebBrowser2* pTr;
m_brows->QueryInterface(__uuidof(ddd::IWebBrowser2),(void**)&pTr);
pTr->put_Silent(TRUE);
BSTR url=L"http://fl.ru";
 
// pTr->Navigate(url, NULL, NULL, NULL, NULL);
pTr->Navigate2(COleVariant(url),NULL,NULL,NULL,NULL);
TRACE("bifore if url=%S\n",url);
// if(pTr->get_LocationName(&url)==S_OK)
/* {
TRACE("begin! ddddddddddddddddddddddddddddddddddddd s=%S\n",url);
/* ddd::DWebBrowserEvents2* pEv;
m_brows->QueryInterface(__uuidof(ddd::DWebBrowserEvents2),(void**)&pEv);*/
// COleVariant v(url);
// pEv->BeforeNavigate2(
// pEv->NavigateComplete2(pTr,&v);
/* TRACE("end! Dddddddddddddddddddddddddddddd\n");
}*/
 
}

Заполняем форму и отправляем

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{
TRACE("x=%x\n",pIHTML);
BSTR s=NULL;
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> pADocument2;
IDispatch* pdispTmpVal2;
 
pIWeb->get_Document(&pdispTmpVal2);//получаем документ
pADocument2 = pdispTmpVal2;
 
CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument3> pADocument3;
IDispatch* pdispTmpVal3;
 
pIWeb->get_Document(&pdispTmpVal3);//получаем документ
pADocument3 = pdispTmpVal3;
//ищем форму, заполняем и кликаем по кнопке
IHTMLElementCollection* ptr;
pADocument2->get_forms(&ptr);//получаем все формы
long p(0);
ptr->get_length(&p);
TRACE("ptr->get_length= %d\n",p);
 
IDispatch *ppvdispOption;
HRESULT hr;
for(int i=0;i<p;i++)
{
 
_variant_t index = i;
hr=ptr->item(index,index,&ppvdispOption);
if(FAILED(hr))
{
TRACE("hr=failed i=%d\n",i);
}
else
{
TRACE("hr=S_OK i=%d\n",i);
//получаем форму у нас одна форма, поэтому мы так ее и ищем
IHTMLFormElement* pElem=NULL;
if(ppvdispOption->QueryInterface(IID_IHTMLFormElement,(void**)&pElem)==S_OK)
{
TRACE("IHTMLFormElement = TRUE\n");
long d(0);
pElem->get_length(&d);
TRACE("pElem->get_length=%d\n",d);
//заполняем форму
_variant_t v(L"input");
IDispatch* pDis=NULL;
for(int i=0;i<d;i++)
{
_variant_t index=i;
if(pElem->item(index,index,&pDis)==S_OK)
{
IHTMLElement* pl=NULL;
if(pDis->QueryInterface(IID_IHTMLElement,(void**)&pl)==S_OK)
{
BSTR tagName;
pl->get_tagName(&tagName);
_variant_t v;
HRESULT hr1;
hr1=pl->getAttribute(L"name",0,&v);
if(!FAILED(hr))
{
TRACE("v=%S\n",_bstr_t(v).Detach());
}
if(_bstr_t(tagName)==_bstr_t(L"INPUT")&&_bstr_t(v)==_bstr_t(L"login"))
{
TRACE("tagName=%S, name=%S\n",tagName,_bstr_t(v).Detach());
_variant_t v_set(L"ks...");
hr1=pl->setAttribute(L"value",v_set,1);
if(FAILED(hr1)){TRACE("bad set attribute\n");}
}
else if(_bstr_t(tagName)==_bstr_t(L"INPUT")&&_bstr_t(v)==_bstr_t(L"passwd"))
{
TRACE("tagName=%S, name=%S\n",tagName,_bstr_t(v).Detach());
_variant_t v_set(L"nin..");
hr1=pl->setAttribute(L"value",v_set,1);
if(FAILED(hr1)){TRACE("bad set attribute\n");}
}
pl->Release();
}
pDis->Release();
}
}
//после заполнения кликаем по форме
if(pElem->submit()==S_OK)
{
TRACE("submin=S_OK");
}
 
 
pElem->Release();
ppvdispOption->Release();
}
else
{
TRACE("IHTMLElement = FALSE\n");
}
}
}
 
pdispTmpVal2->Release();
pdispTmpVal3->Release();
}   
}

 

Создание браузера

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
pIWeb=NULL;
CRect rectClient(10,10,500,900);
if (!m_wndBrowser.CreateControl(__uuidof(ddd::WebBrowser), _T("Window"),
WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
{
DestroyWindow();
}
if (m_brows = m_wndBrowser.GetControlUnknown())
{
m_brows.QueryInterface(__uuidof(ddd::IWebBrowser2),(void**)&pIWeb);;
}

IHTMLElement находим событие в ссылке и кликаем по ссылке

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
std::smatch m;
std::regex rv ("href=\"/contacts/\"");   // matches words beginning by "sub"
 
if (std::regex_search (s,m,rv))
{
AfxMessageBox(L"Авторизован");
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
pDoc2=pDisp;
IHTMLElementCollection* pColl=NULL;
if(pDoc2->get_all(&pColl)!=S_OK){AfxMessageBox(L"not pColl");exit(1);}
long n(0);
pColl->get_length(&n);
 
IDispatch* ppvdispOption=NULL;
for(int i=0;i<n;i++)
{
_variant_t index = i;
if(pColl->item(index,index,&ppvdispOption)!=S_OK){AfxMessageBox(L"not ppvdispOption");exit(1);}
IHTMLElement* pElem=NULL;
if(ppvdispOption->QueryInterface(IID_IHTMLElement,(void**)&pElem)!=S_OK)
{AfxMessageBox(L"not pElem");exit(1);}
BSTR tagName;
//получаем имя тега
           if(pElem->get_tagName(&tagName)==S_OK)
           {
// TRACE("tagName=%S\n",tagName);
if(_bstr_t(tagName)==_bstr_t(L"A"))
{
//Смотрим класс
VARIANT onClick;
VARIANT atr;
// if(pElem->get_onclick(&onClick)==S_OK&&(onClick.vt==8))
if(pElem->getAttribute(L"onclick",4,&atr)==S_OK)
// if(pElem->get_className(&className)==S_OK)
{
// TRACE("atr.vt=%d\n",atr.vt);
// TRACE("atr=%S\n",_bstr_t(atr).copy());
if(_bstr_t(atr)!=_bstr_t(L""))
TRACE("atr=%S\n",_bstr_t(atr).copy());
rv.assign("Bar_Ext\\.logout\\(\\);");   // matches words beginning by "sub"
std::string temp=_com_util::ConvertBSTRToString(_bstr_t(atr).copy());
if (std::regex_search (temp,m,rv))
{
TRACE("search=%Sn",_bstr_t(atr).Detach());
m_pWeb2->get_ReadyState(&r);
TRACE("r1=%d\n",r);
                           pElem->click();
                      
m_pWeb2->get_ReadyState(&r);
TRACE("r2=%d\n",r);
return;
                       }
                   }
         }
}
}

Находит изображение загруженное в браузере и сохраняет его в буфер, затем из буфера сохраняем в CBitmap и в img.png

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
IHTMLDocument2* pDoc = NULL;
IHTMLElement* pelmBody = NULL;
IHTMLElement2* pelmBodyTwo = NULL;
IDispatch* pdispImgElement = NULL;
IDispatch* pdispCtrlRange = NULL;
IHTMLElementCollection* pColl = NULL;
IHTMLControlElement* pCtrlElement = NULL;
IHTMLControlRange* pCtrlRange = NULL;
 
VARIANT_BOOL vbReturn;
VARIANT vEmpty;
VariantInit(&vEmpty);
 
// 1. получаем pDoc
if(pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc)!=S_OK){AfxMessageBox(L"net pDoc");return;}
// 2. получаем pColl
if(pDoc->get_images(&pColl)!=S_OK){AfxMessageBox(L"net pCol");return;}
long n(0);
pColl->get_length(&n);
TRACE("n=%d\n",n);
_variant_t index=5;
// 3. получаем IDispatch* pdispImgElement = NULL;
if (FAILED(pColl->item(index, vEmpty, &pdispImgElement)) || pdispImgElement == NULL)
{AfxMessageBox(L"net pdispImgElement");return;}
// 4. получаем IHTMLElement* pelmBody = NULL;
if(FAILED(pDoc->get_body(&pelmBody)) || pelmBody == NULL)
{AfxMessageBox(L"net pelmBody");return;}
// 5. получаем IHTMLElement2* pelmBodyTwo = NULL;
if (FAILED(pelmBody->QueryInterface(IID_IHTMLElement2, (void**) &pelmBodyTwo)) || pelmBodyTwo == NULL)
{AfxMessageBox(L"net pelmBodyTwo");return;}
// 6. получаем IDispatch* pdispCtrlRange = NULL;
if (FAILED(pelmBodyTwo->createControlRange(&pdispCtrlRange)) || pdispCtrlRange == NULL)
{AfxMessageBox(L"net pelmBodyTwo");return;}
// 7. получаем IHTMLControlRange* pCtrlRange = NULL;
if (FAILED(pdispCtrlRange->QueryInterface(IID_IHTMLControlRange, (void**) &pCtrlRange)) || pCtrlRange == NULL)
{AfxMessageBox(L"net pCtrlRange");return;}
// 8. получаем IHTMLControlElement* pCtrlElement = NULL;
if (FAILED(pdispImgElement->QueryInterface(IID_IHTMLControlElement, (void**) &pCtrlElement)) || pCtrlElement == NULL)
{AfxMessageBox(L"net pCtrlElement");return;}
// 9. добавляем элементв Control
if(FAILED(pCtrlRange->add(pCtrlElement))){AfxMessageBox(L"not pCtrlRange->add(pCtrlElement)");}
// 10. выполняем команду (походу коппирует в буфер изображение в браузере)
if(FAILED( pCtrlRange->execCommand(L"Copy", VARIANT_FALSE, vEmpty, &vbReturn) ))
{AfxMessageBox(L"net execCommand");return;}
 
// 11. читаем из буфера битмеп
if ( !OpenClipboard() )//открываем буфер
{AfxMessageBox( _T("Cannot open the Clipboard") );return;}
HGLOBAL hGlob=NULL;
hGlob=::GetClipboardData(CF_BITMAP);
if(hGlob==NULL)AfxMessageBox(L"hGlob==NULL");
CloseClipboard();//закрываем буфер
//------------------------------
 
// 12. сохраняем изображение из буфера в виде png файла
CBitmap* m_pBitmap=(CBitmap*)hGlob;
CImage img;
img.Attach(HBITMAP(m_pBitmap));
img.Save(L"img.png");
//------------------------------

Сделать прокрутку в конец страницы

Показать »

1
2
3
4
CComQIPtr<IHTMLWindow2,&IID_IHTMLWindow2> pWind2;
if(pDoc2->get_parentWindow(&pWind2)!=S_OK){AfxMessageBox(L"net pWin2");exit(1);}
long begin=100000000;
pWind2->scrollTo(100,begin);//прокручивает вниз

 

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant