我正在制作一个wpf应用程序,我需要它从生成的搜索结果中随机选择一个链接。我不知道该怎么做。这只是我被指派的智力练习。请帮忙,我快做完了。这是目前为止的密码。。。我是WPF的超级初学者。

namespace Search
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Btn_Click(object sender, RoutedEventArgs e)
        {
            using (var browser = new IE("http://www.google.com"))
            {
                browser.TextField(Find.ByName("q")).TypeText(_textBox.Text);
                browser.Button(Find.ByName("btnG")).Click();

                browser.WaitForComplete(5000);

                System.Windows.Forms.SendKeys.SendWait("{Enter}"); // presses search on the second screen

                browser.Button(Find.ById("gbqfb")/*.ByName("btnG")*/).Click(); // doesn't work



            }
        }
    }
}

最佳答案

这里有一些指示代码。。。

private void DownloadRandomLink(string searchTerm)
{
    string fullUrl = "http://www.google.com/#q=" + searchTerm;
    WebClient wc = new WebClient();
    wc.DownloadFile(fullUrl, "file.htm");
    Random rand = new Random();
    HtmlDocument doc = new HtmlDocument();
    doc.Load("file.htm");
    var linksOnPage = from lnks in doc.DocumentNode.Descendants()
                      where lnks.Name == "a" &&
                            lnks.Attributes["href"] != null &&
                            lnks.InnerText.Trim().Length > 0
                      select new
                          {
                              Url = lnks.Attributes["href"].Value,
                              Text = lnks.InnerText
                          };
    if (linksOnPage.Count() > 0)
    {
        int randomChoice = rand.Next(0, linksOnPage.Count()-1);
        var link = linksOnPage.Skip(randomChoice).First();
        // do something with link...
    }
}

这段代码接受一个搜索项并构建一个完整的Google url。然后,它将查询下载到一个本地文件中,并使用HTML Agility包打开该文件。
然后代码创建一个页面上所有链接的列表,并使用拼凑在一起的随机选择。
正如其他人提到的,你需要得到谷歌的许可才能在他们的服务器上运行代码。不这样做会让你陷入困境,可能会产生尴尬的后果。
此外,这段代码是指示性的;它不是示例性的,甚至不是可构建的。这是一个粗略的步骤,需要得到什么,你是追求。
你之前的设计是试图与谷歌索引页上的控件交互,这种方法在第一次使用时太脆弱了。你不可能一开始就测试它。
HTML敏捷包在这里http://htmlagilitypack.codeplex.com/wikipage?title=Examples

08-26 16:47
查看更多