Как программно нажать кнопку на сайте?
От: GGoga  
Дата: 26.09.09 12:29
Оценка:
Привет всем!
Есть такая задача: нужно программно зайти на страничку сайта в интернете заполнить там 1 текстовое поле, после чего нажать кнопку и после этого считать данные с определенных контроллов на страничке. Более подробно: есть приложение (Windows), написанное на C#. При нажатии на кнопку надо загрузить данные из файла и в цикле (считывая построчно) вводить их в текстовое поле на определенном сайте (например, поле запроса в Google), после чего нажимать кнопку и считывать появившиеся результаты со странички и записывать их в выходной файл.
Так вот "корень" проблемы — работа с сайтом (в теме не ориентируюсь вообще)
Интуитивно понимаю, что дело достаточно банальное (думаю несколько строк кода), однако в этом вопросе я полнейший "чайник".
Я так понимаю, что все это можно реализовывать на javascript-е, но я в нем вообще не разбираюсь, а времени на освоение нету вообще
Буду премного благодарен за любое содействие, будь то ссылка на примеры, мануал (конкретный раздел) по javascript-у или сам пример (хотя бы пару строк) реализации.
Сразу огромная просьба не пинать и не злорадствовать

Заранее, ОГРОМНОЕ СПАСИБО!!!
Re: Как программно нажать кнопку на сайте?
От: MozgC США http://nightcoder.livejournal.com
Дата: 26.09.09 12:56
Оценка: 1 (1)
Это делается не через эмуляцию нажатия на кнопку а через отправку GET или POST запросов серверу.
Скорее всего на там сайте есть форма (<form>), при сабмите которой данные отправляются с помощью GET или POST метода на определенный скрипт.
Нужно просто посмотреть адрес этого скрипта, посмотреть каким методом (get или post) передаются ему данные и выполнять соответствующий запрос из вашего скрипта.
Результат запроса (это будет скорее всего ответная html-страница) нужно парсить, чтобы получить нужные данные. Если результатом будет не html страница, а специальный xml — то там будет несколько удобнее, т.к. обычно пройтись по xml проще чем парсить страницу регулярными выражениями.
Соответственно ваш вопрос теперь должен трансформироваться в "как отправить GET или POST запрос {ПОДСТАВИТЬ_СЮДА_ВАШ_ЯЗЫК}". Удачи.
Re[2]: Как программно нажать кнопку на сайте?
От: GGoga  
Дата: 27.09.09 12:37
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Это делается не через эмуляцию нажатия на кнопку а через отправку GET или POST запросов серверу.

MC>...
MC>Соответственно ваш вопрос теперь должен трансформироваться в "как отправить GET или POST запрос {ПОДСТАВИТЬ_СЮДА_ВАШ_ЯЗЫК}". Удачи.

Спасибо! уже разобрался!
Язык C# — в нем оказалось все очень просто реализовать с испольвованием класса WebBrowser.
Тема закрыта!
Re: Как программно нажать кнопку на сайте?
От: Аноним  
Дата: 27.09.09 12:40
Оценка: 4 (1)
Здравствуйте, 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();
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.