C # Web Browser Bot вопрос - PullRequest
       6

C # Web Browser Bot вопрос

0 голосов
/ 11 марта 2011

хочу сделать браузер ботом.Стоит нажать на ссылку и подождать 25 секунд.

    private void webBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) // This is only way It worked for me.
    {
        if (webBrowserMain.Url.AbsoluteUri == @"http://www.clix-cents.com/pages/clickads")
        {
            Regex regAddId = new Regex("onclick=\\'openad\\(\"([\\d\\w]+)\"\\);", RegexOptions.IgnoreCase); // Find link and click it.
            if (regAddId.IsMatch(webBrowserMain.DocumentText))
            {
                string AddId = regAddId.Match(webBrowserMain.DocumentText).Groups[1].ToString();
                webBrowserMain.Navigate(@"http://www.clix-cents.com/pages/clickads?h=" + AddId);
            }
        }
        else if (webBrowserMain.Url.AbsoluteUri.Contains("http://www.clix-cents.com/pages/clickads?h=")) // up to there everything is ok. But problem starts here.
        {
            Thread.Sleep(25000); // It pouses whole thread and browser, so timer in browser is not counting down.
            Regex regCaptchaCode = new Regex("src=\\'/pages/captcha\\?t=c&s=([\\d\\w\\W]+)\\'", RegexOptions.IgnoreCase);
            if (regCaptchaCode.IsMatch(webBrowserMain.DocumentText))
            {
                pictureBox1.ImageLocation = @"http://www.clix-cents.com/pages/captcha?t=c&s=" + regCaptchaCode.Match(webBrowserMain.DocumentText).ToString();
            }
        }
    }

Как написать бота для чего-то подобного?Понятия не имею.

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Не изобретайте колесо - уже есть такие решения, как WatiN , который в основном используется для тестирования, но также подходит для автоматизации.

Пример кода со страницы WatiN:

[Test]
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}
1 голос
/ 11 марта 2011

Возможно, вы могли бы использовать таймер. Например:

private Timer t = new Timer();
private string nextUrl = "";
private void buttonStart_Click(object sender, EventArgs e)
{
    t.Interval = 2500;
    t.Tick += new EventHandler(t_Tick);
}

void t_Tick(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(nextUrl))
        webBrowser1.Navigate(nextUrl);
    else
    {
        Regex regCaptchaCode = new Regex("src=\\'/pages/captcha\\?t=c&s=([\\d\\w\\W]+)\\'", RegexOptions.IgnoreCase);
        if (regCaptchaCode.IsMatch(webBrowserMain.DocumentText))
        {
            pictureBox1.ImageLocation = @"http://www.clix-cents.com/pages/captcha?t=c&s=" + regCaptchaCode.Match(webBrowserMain.DocumentText).ToString();
        }
    }
}
private void webBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) // This is only way It worked for me.
{
    if (webBrowserMain.Url.AbsoluteUri == @"http://www.clix-cents.com/pages/clickads")
    {
        Regex regAddId = new Regex("onclick=\\'openad\\(\"([\\d\\w]+)\"\\);", RegexOptions.IgnoreCase); // Find link and click it.
        if (regAddId.IsMatch(webBrowserMain.DocumentText))
        {
            string AddId = regAddId.Match(webBrowserMain.DocumentText).Groups[1].ToString();
            nextUrl = @"http://www.clix-cents.com/pages/clickads?h=" + AddId;
            t.Start();
        }
    }
    else if (webBrowserMain.Url.AbsoluteUri.Contains("http://www.clix-cents.com/pages/clickads?h=")) // up to there everything is ok. But problem starts here.
    {
        nextUrl = "";
        t.Start();
    }
}

Фактическая реализация будет зависеть от фактических данных на сайте и от того, как вы хотите их использовать. Если все ссылки находятся на одной странице, и вы хотите открыть каждую из них, вы можете проанализировать все ссылки и сохранить их в виде списка. Затем запустите таймер. На каждом тике вы можете открыть 1 пункт.

...