Привет всем!
Есть такая задача: нужно программно зайти на страничку сайта в интернете заполнить там 1 текстовое поле, после чего нажать кнопку и после этого считать данные с определенных контроллов на страничке. Более подробно: есть приложение (Windows), написанное на C#. При нажатии на кнопку надо загрузить данные из файла и в цикле (считывая построчно) вводить их в текстовое поле на определенном сайте (например, поле запроса в Google), после чего нажимать кнопку и считывать появившиеся результаты со странички и записывать их в выходной файл.
Так вот "корень" проблемы — работа с сайтом (в теме не ориентируюсь вообще)
Интуитивно понимаю, что дело достаточно банальное (думаю несколько строк кода), однако в этом вопросе я полнейший "чайник".
Я так понимаю, что все это можно реализовывать на javascript-е, но я в нем вообще не разбираюсь, а времени на освоение нету вообще
Буду премного благодарен за любое содействие, будь то ссылка на примеры, мануал (конкретный раздел) по javascript-у или сам пример (хотя бы пару строк) реализации.
Сразу огромная просьба не пинать и не злорадствовать
Заранее, ОГРОМНОЕ СПАСИБО!!!
Это делается не через эмуляцию нажатия на кнопку а через отправку GET или POST запросов серверу.
Скорее всего на там сайте есть форма (<form>), при сабмите которой данные отправляются с помощью GET или POST метода на определенный скрипт.
Нужно просто посмотреть адрес этого скрипта, посмотреть каким методом (get или post) передаются ему данные и выполнять соответствующий запрос из вашего скрипта.
Результат запроса (это будет скорее всего ответная html-страница) нужно парсить, чтобы получить нужные данные. Если результатом будет не html страница, а специальный xml — то там будет несколько удобнее, т.к. обычно пройтись по xml проще чем парсить страницу регулярными выражениями.
Соответственно ваш вопрос теперь должен трансформироваться в "как отправить GET или POST запрос {ПОДСТАВИТЬ_СЮДА_ВАШ_ЯЗЫК}". Удачи.
Здравствуйте, GGoga, Вы писали:
GG>Привет всем!
GG>Есть такая задача: нужно программно зайти на страничку сайта в интернете заполнить там 1 текстовое поле, после чего нажать кнопку и после этого считать данные с определенных контроллов на страничке. Более подробно: есть приложение (Windows), написанное на C#. При нажатии на кнопку надо загрузить данные из файла и в цикле (считывая построчно) вводить их в текстовое поле на определенном сайте (например, поле запроса в Google), после чего нажимать кнопку и считывать появившиеся результаты со странички и записывать их в выходной файл.
GG>Так вот "корень" проблемы — работа с сайтом (в теме не ориентируюсь вообще)
GG>Интуитивно понимаю, что дело достаточно банальное (думаю несколько строк кода), однако в этом вопросе я полнейший "чайник".
GG>Я так понимаю, что все это можно реализовывать на javascript-е, но я в нем вообще не разбираюсь, а времени на освоение нету вообще
GG>Буду премного благодарен за любое содействие, будь то ссылка на примеры, мануал (конкретный раздел) по javascript-у или сам пример (хотя бы пару строк) реализации.
GG>Сразу огромная просьба не пинать и не злорадствовать
GG>Заранее, ОГРОМНОЕ СПАСИБО!!!
Можно и программно нажимать на кнопку если есть желание. А можно, как уже сказали, отправкой запроса.
Если программно — создаешь браузер как COM-объект, например так:
BOOL CreateBrowserInstance()
{
HRESULT hr;
hr = CoCreateInstance(
CLSID_InternetExplorer,
NULL,
CLSCTX_ALL,
IID_IWebBrowser2,
( void** )&pBrowser
);
return FAILED( hr )? FALSE : TRUE;
}
Через указатель pBrowser потом рулишь созданным экземпляром браузера. Зайти на страничку:
...
pBrowser->Navigate2( ... );
Потом получаешь документ:
HRESULT hr;
IDispatch* pDisp = NULL;
hr = m_pBrowser->get_Document( &pDisp );
hr = pDisp->QueryInterface( IID_IHTMLDocument2,( void** )&pHTMLDocument );
Потом работаешь с документом, используя DOM. Например, кликнуть кнопку:
IHTMLElementCollection *pCollection;
IDispatch *pDisp;
LONG lNumber;
HTRESULT hr;
hr = m_pHTMLDocument->get_all( &pCollection );
hr = pCollection->get_length( &lNumber );
// дальше пробегаешься по всем элементам коллекции, находишь по аттрибутам (наличие нужного интерфейса, id, name, class, ... ) нужный тебе
for( LONG i = 0; i < lNumber; i++ )
{
IHTMLElement *pHtmlElement;
IHTMLButtonElement *pButtonElement;
hr = pCollection->item( index, base, &pDisp );
hr = pDisp->QueryInterface( IID_IHTMLButtonElement, (void**)pButtonElement );
hr = pButtonElement->QueryInterface( IID_IHTMLElement, (void**)pHtmlElement );
// проверить аттрибуты
...
// кликнуть кнопку
hr = pHtmlElement->click();
}