在 C# 中更好的方法来搜索第三方网站上的数据

Posted

技术标签:

【中文标题】在 C# 中更好的方法来搜索第三方网站上的数据【英文标题】:Better approach in C# to search data on a third party web site 【发布时间】:2014-03-01 19:05:32 【问题描述】:

这是我的要求。有一个公共网站将字母数字字符串作为输入并将数据检索到表格元素中(通过按钮单击)。表格元素有几个标签,这些标签填充了相应的数据。我需要一个可以检查网站数据库中是否存在特定字符串的工具/解决方案。如果是这样,则检索该字符串所有出现的所有 Id。查看网站的“查看源代码”(那里没有使用 javascript),我注意到了输入元素名称和按钮元素名称,并且在现有示例的帮助下,我能够获得一个可行的解决方案。下面是有效的代码,但我想检查是否有更好更快的方法。我知道下面的代码有一些问题,比如“无限循环”问题和其他问题。但我基本上是在寻找可以快速处理一百万条记录的替代解决方案。

    namespace SearchWebSite
    
        public partial class Form1 : Form
        
            bool searched = false;
            long i; 

            public Form1()
            
                InitializeComponent();
            

            private void button1_Click(object sender, EventArgs e)
            
                i = 1;
                WebBrowser browser = new WebBrowser();
                string target = "http://www.SomePublicWebsite.com";
                browser.Navigate(target);
                browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(XYZ);
            


            private void XYZ(object sender, WebBrowserDocumentCompletedEventArgs e)
            
                WebBrowser b = null;
                if (searched == false)
                
                    b = (WebBrowser)sender;
                    b.Document.GetElementById("txtId").InnerText = "M" + i.ToString();
                    b.Document.GetElementById("btnSearch").InvokeMember("click");
                    searched = true;
                

                if (b.ReadyState == WebBrowserReadyState.Complete)
                
                    if (b.Document.GetElementById("lblName") != null)
                    
                        string IdNo = "M" + i.ToString();
                        string DateString = b.Document.GetElementById("lblDate").Innerhtml;
                        string NameString = b.Document.GetElementById("lblName").InnerHtml;

                        if (NameString != null && (NameString.Contains("XXXX") || NameString.Contains("xxxx")))
                        
                            using (StreamWriter w = File.AppendText("log.txt"))
                            
                                w.WriteLine("Id 0, Date 1, Name 2", IdNo, DateString, NameString);
                                i = i + 1;
                                searched = false;
                            
                        
                        else
                        
                            i = i + 1;
                            searched = false;
                        
                    
                    else
                    
                        i = i + 1;
                        searched = false;
                    
                
            
        
    

【问题讨论】:

i = i + 1。有趣:-) 这绝对更适合code review 你为什么还要担心无限循环?我什至没有看到循环 【参考方案1】:

如果单击seach按钮后的页面包含txtId和btnSearch控件,则可以使用此代码sn-p,这不是更快,但我认为是正确的形式。

public partial class Form1 : Form

    bool searched = false;
    long i = 1;
    private string IdNo  get  return "M" + i.ToString();  
    public Form1()
    
        InitializeComponent(); 
    

    private void button1_Click(object sender, EventArgs e)
    
        i = 1;
        WebBrowser browser = new WebBrowser();
        string target = "http://www.SomePublicWebsite.com";
        browser.Navigate(target);
        browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(XYZ);
    
    private void XYZ(object sender, WebBrowserDocumentCompletedEventArgs e)
    
        WebBrowser b = (WebBrowser)sender;
        if (b.ReadyState == WebBrowserReadyState. Complete)
        
            if (searched == false)
            
                DoSearch(b); return;
            
            if (b.Document.GetElementById("lblName") != null)
            
                string DateString = b.Document.GetElementById("lblDate").InnerHtml;
                string NameString = b.Document.GetElementById("lblName").InnerHtml;

                if (NameString != null && (NameString.Contains("XXXX") || NameString.Contains("xxxx")))
                    using (StreamWriter w = File.AppendText("log.txt"))
                        w.WriteLine("Id 0, Date 1, Name 2", IdNo, DateString, NameString);
            
            i++;
            DoSearch(b);
        
    
    private void DoSearch(WebBrowser wb)
    
        wb.Document.GetElementById("txtId").InnerText = IdNo;
        wb.Document.GetElementById("btnSearch").InvokeMember("click");
        searched = true;
    

【讨论】:

以上是关于在 C# 中更好的方法来搜索第三方网站上的数据的主要内容,如果未能解决你的问题,请参考以下文章

Win10 搜索功能无法找到已经安装的软件解决方法

如何抓取微信所有公众号最新文章

如何在 Sandcastle C# 文档构建中链接第三方文档

C#接入第三方支付一些小问题

google search console到了第三天也没有关于网站的任何数据?

在 C# 中从图像中裁剪空白 [重复]