c# - 从 C# 中生成的搜索结果中选择一个随机链接

标签 c# html wpf linq webclient

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

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 网址。然后它将查询下载到本地文件中,并使用 HTML Agility Pack 打开该文件。

然后代码创建页面上所有链接的列表,并使用拼凑在一起的随机选择。

正如其他人所提到的,您需要获得 Google 的许可才能在他们的服务器上运行代码。不这样做会使您违反规定并可能产生尴尬的后果。

另外,这段代码是指示性的;它不是模范,甚至不是可构建。这是获得您所追求的目标所需步骤的粗略概念。

您之前的设计试图与 Google 索引页上的控件进行交互,而这种方法在一开始就太脆弱了。初学者很难对其进行测试。

HTML 敏捷包在这里 http://htmlagilitypack.codeplex.com/wikipage?title=Examples

关于c# - 从 C# 中生成的搜索结果中选择一个随机链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553741/

相关文章:

c# - 获取 SQL 表的受影响行数

c# - 部分 MonthCalendar 本地化失败 ('Today' 标签未翻译)

html - 为什么 after 伪元素在 firefox 中绝对定位时会移动一个额外的像素?

WPF接受没有焦点的输入

c# - WPF ComboBox 最初没有选择正确的项目

c# - 在 WPF 中使用 Close() 函数与不使用 Close()

c# - 验证列表是否具有所有其他列表值

c# - Spring.net,AOP 导致无法设置属性

css - 合并两个 css 文件会提高网页性能吗?

html - 如何减少页面加载时的外部 webfonts 滞后时间?