Как очистить гиперссылки на странице с помощью WatIn? - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь собрать список гиперссылок (URL-адрес, на который он ссылается), используя WatIn. Я пытался использовать:

            foreach (Link l in myIE.Links)
            {

                Links.Add(l.ToString());                    
            }


            string LinksCSV = string.Join(",", Links.ToArray());
            richTextBox2.Text = LinksCSV;

Я пытаюсь перечислить все гиперссылки в моем richtextbox, однако приведенное выше вернуло имя гиперссылки, поэтому снова и снова показывалось «Ссылка».

Кроме того, мне нужно перечислить только URL / ссылки, которые содержат «webpage.php? Id =», а затем после этого имеют уникальный номер. Как вернуть очищенные URL-адреса, отфильтрованные только по тем, которые содержат "webpage.php? Id ="?

UPDATE: Вот обновленный тест, который работает на других сайтах, но не на моем. Приведенный ниже код работает.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WatiN.Core;


namespace ScrapeTest
{
class Program
{
    [STAThread]
        static void Main(string[] args)
    {
        IE ie = new IE();

        ie.GoTo("http://www.freesound.org/browse/tags/organ/");

        foreach (var currLink in ie.Links)
        {
            if (currLink.Url.Contains("sounds"))
            {
                Console.WriteLine("contains Edit in the link Url" + currLink.Url);
            }
        }

        Console.ReadLine();

    }

}

}

Код кажется правильным, однако проблема заключается в его взаимодействии с моим конкретным URL-адресом и гиперссылками. Сайт и гиперссылки, которые я после, содержат конфиденциальную информацию, отсюда и их упущение.

Использование моих сайтов Главная страница http://website.com скрипт выполняется, поэтому возникла проблема с уникальной страницей, которую я отправляю на http://website.com/data.php?search=%22%22&cat=0 Может ли это быть из-за .php в URL? Также URL-адреса сохраняются на странице, как показано ниже, если это помогает.

td class="alt2">
<a align="center" href="data.php?id=111111">EDIT</a>
/td>

ОБНОВЛЕНИЕ и РЕШЕНИЕ. По какой-то причине проблема возникает, когда я пытаюсь использовать метод Url.Contains. То, что я в итоге сделал, - это сохранение каждого соскобленного URL-адреса в списке, и построчно, по мере необходимости, тестирую мой список, чтобы вернуть требуемые URL-адреса. Большое спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

в вашем коде myIE.Links - это LinkCollection, что означает, что когда вы перебираете объекты Link, вам нужно указать, какое свойство вы хотите, в данном случае это будет Url

Пример - Перейдите на google.com и запишите адреса ссылок на консоль.

    ie.GoTo("http://www.google.com");

    System.Threading.Thread.Sleep(5000);   //<-- Added due to diagnose what might be a timing issue.

    foreach (var currLink in ie.Links)
    {
        if (currLink.Url.Contains("www.google.com"))
        {
            Console.WriteLine("contains www.google.com in the link Url" + currLink.Url);
        }
    }

Протестировано на WatiN 2.1, IE9, Win7.

0 голосов
/ 18 ноября 2011

Вы можете сделать это с помощью Contains () следующим образом

foreach (Link l in myIE.Links)    
{  
            if(l.ToString().Contains("webpage.php?id="))
                Links.Add(l.ToString());  
} 
...