Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2012, 18:18   #1
Macwin
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 12
По умолчанию Как программно нажать на Ajax ссылку через WebBrowser?

Знакомый попросил сделать "накручивалку" рейтинга на оодном сайте. Начал писать, но уже 4 часа не могу разобраться, как кликнуть на ссылку такого типа:
Код HTML:
<a class="like " href="#" onclick="Posts.like(this); return false" data-pid="270329">
Стандартными методами не получилось:
Код:
            foreach (HtmlElement a in browser.Document.All)
            {
                if (a.GetAttribute("class") == "like ")
                {
                    a.InvokeMember("click");
                }
            }
Немного подумав, разобрался, что это возможно сделать с помощью

Код:
javascript:Posts.like(document.getElementsByClassName('like')[0]);
Но в Internet Explorer это не работает, поэтому решил попробовать сделать так:

Код:
object[] args = { "document.getElementsByClassName('like')[0]" };
WebBrowser.Document.InvokeScript("Posts.like", args);
Это тоже не помогло.

Как нажать на эту ссылку?
Листинг приложения:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace memslike
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLike_Click(object sender, EventArgs e)
        {
            browser.Navigate("http://1001mem.ru/signin"); //Входим...

            while (browser.ReadyState != WebBrowserReadyState.Complete)
                System.Windows.Forms.Application.DoEvents();
            System.Threading.Thread.Sleep(500);

            HtmlDocument doc = browser.Document; 
            HtmlElement elem1 = doc.GetElementById("username"); //Временно, потом будем считывать из файла
            elem1.Focus(); 
            elem1.InnerText = "miSmKyFrjV"; //Временно, потом будем считывать из файла
            HtmlElement elem2 = doc.GetElementById("password"); //Временно, потом будем считывать из файла
            elem2.Focus();
            elem2.InnerText = "miSmKyFrjV"; //Временно, потом будем считывать из файла

            foreach (HtmlElement he in browser.Document.All)
            {
                if (he.GetAttribute("type") == "submit")
                {
                    he.InvokeMember("click");
                }
            }
            //Вошли
            browser.Navigate("http://1001mem.ru/p1185987"); //Временно, будет заменен на ссылку из файла
        }
    }
}
Macwin вне форума Ответить с цитированием
Старый 13.08.2012, 19:40   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Код:
object[] args = { "Posts.like($('.like')[0])" };
webBrowser1.Document.InvokeScript("eval", args);
Нету в ие такой функции getElementsByClassName
http://caniuse.com/getelementsbyclassname

Последний раз редактировалось Reskov; 13.08.2012 в 19:43.
Reskov вне форума Ответить с цитированием
Старый 13.08.2012, 20:01   #3
Macwin
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 12
По умолчанию

Спасибо, но ваш пример не работает.
Macwin вне форума Ответить с цитированием
Старый 14.08.2012, 01:14   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Спасибо, но мой пример работает. Я проверял.
Reskov вне форума Ответить с цитированием
Старый 14.08.2012, 08:31   #5
Macwin
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 12
По умолчанию

Не работает. Я проверял.

Последний раз редактировалось Macwin; 14.08.2012 в 08:40.
Macwin вне форума Ответить с цитированием
Старый 14.08.2012, 08:40   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Reskov, а на сайте точно есть jQuery?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.08.2012, 11:29   #7
Macwin
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 12
По умолчанию

Все работает. Это я ступил. Надо было таймер ставить.
Macwin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Webbrowser нажать правильно на ссылку Зод Работа с сетью в Delphi 8 11.02.2012 10:00
Как программно нажать Enter, зная Handle? MURDERER Общие вопросы Delphi 1 15.09.2008 00:00
Как программно нажать Ctrl + V ffo Win Api 11 29.07.2007 17:58
Как программно нажать клавишу в чужом процессе? Sere0ga Win Api 2 27.03.2007 18:43