【问题标题】:Scraping a website built with angular2+ - can't fire a click抓取使用 angular2+ 构建的网站 - 无法触发点击
【发布时间】:2018-06-19 04:39:07
【问题描述】:

我想用c# 抓取一个网站,该网站是用angular2+ 构建的。 我在点击按钮、链接等方面取得了一些成功。 我在winform应用程序中做得很薄,并使用browserObject

我的问题是:

在一个地方,我必须从下拉菜单中选择一个选项并触发点击事件。 我已成功设置下拉菜单中的值,但我无法点击

我正在使用以下代码:

   var select = browser.Document.GetElementsByTagName("select");

   var foundGIAXXXN = false;
   foreach (HtmlElement s in select)
   {
       if (s.GetAttribute("ng-model") == "savedSearchModel")
       {
           var options = s.Children;
           int optionIndex = -1;
           foreach (HtmlElement o in s.Children)
           {
               optionIndex++;
               if (o.InnerText == "GIAGGGVST")
               {
                   s.Children[optionIndex].SetAttribute("selected", "selected");
                   //o.SetAttribute("selected", "selected");
                   s.SetAttribute("class", "ng-valid ng-touched ng-not-empty ng-dirty ng-valid-parse");
                   foundGIAXXXN = true;
                   break;
               }
           }
       }

       if (foundGIAXXXN)
           break;
   }

   await Sleep(2);


   foreach (HtmlElement b in browser.Document.GetElementsByTagName("button"))
   {
       if (b.GetAttribute("ng-click") == "vm.getSavedFilterBySaveID(savedSearchModel); isLoadSavedOpen = false;")
       {
           b.InvokeMember("click");
       }
   }

【问题讨论】:

  • 你应该试试 Selenium C#
  • 谢谢@MataPrasadChauhan,我刚刚问了我的朋友和想要废弃的网站有一个 API,我可以用它来获取数据,我是使用 API 的新手,所以我不知道这。谢谢你的建议:)

标签: c# angular winforms web-scraping


【解决方案1】:

我得出的结论是,我们不能使用C# WebBrowser 类来废弃使用angular2+ 构建的网站,或者说这样做非常困难,因为angular 在两者之间添加了许多类我们无法在 C# 中进行的用户交互。

现在,我正在使用网站提供的 API,这是从网站获取数据的最佳方式。

注意:不要尝试使用C# WebBrowser 类废弃使用angular 构建的网站

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 2016-05-06
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2017-08-16
    相关资源
    最近更新 更多