在C#.NET Core控制台应用程序中从浏览器页面检查器捕获数据

时间:2018-08-08 17:49:32

标签: c# html .net-core web-inspector

我的C#.NET Core控制台应用程序是一个简单的Web搜寻器。在源代码中包含所需数据的页面上,我可以访问所需数据。在可以从窗口复制数据的页面中,可以在浏览器的页面检查器中查看,而不能在源代码中查看,这很麻烦。

Chrome Page Inspector shows code needed for download

请提供有关如何获取此数据的代码示例。

我当前的捕获代码如下:

var htmlCode = string.empty;
using (WebClient client = new WebClient()) // WebClient class inherits IDisposable
{
     // Get the file content without saving it
     htmlCode = client.DownloadString("https://www.wedj.com/dj-photo-video.nsf/firstdance.html");
}

使用上面的代码,您将收到源代码,如下所示: enter image description here

从浏览器检查器中看到的图像1中的数据隐藏在

内部
<div class="entry row">

3 个答案:

答案 0 :(得分:1)

有几种方法可以实现所需的功能(考虑C#控制台应用程序)。

也许最简单的方法是使用与浏览器实例进行交互的工具,即Selenium(用于单元测试)。 所以:

  1. 安装Selenium.WebDriver nuget程序包
  2. 安装将在其中运行应用程序的浏览器(假设是chrome)
  3. 下载浏览器驱动程序(chromedriver
  4. 写类似:

    IWebDriver driver = null;
    try
    {
        ChromeOptions options = new ChromeOptions();
        options.AddArguments("--incognito");
    
        driver = new ChromeDriver(options);
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
        driver.Url = "https://www.wedj.com/dj-photo-video.nsf/firstdance.html";
    
        var musicTable = driver.FindElement(By.Id("musicTable"));
        // interact with driver to get data from the page.
     }
     finally
     {
        if (driver != null)
           driver.Dispose();
     }
    

否则,您需要进一步研究网页的工作方式。 据我所知,该页面加载了一个JavaScript https://www.wedj.com/dj-photo-video.nsf/musiclist.js,它负责从服务器加载音乐列表。 该js脚本基本上从以下URL加载数据:https://www.wedj.com/gbmusic.nsf/musicList?open&wedj=1&list=category_firstdance&count=100(您也可以在浏览器中打开它)。不包括“(”和“)”,结果是可以解析的json(也许使用newtonsoft.json包):

{
  "more": "yes",
  "title": "<h1>Most Requested Wedding First Dance Songs<\/h...",
  "event": "<table class='musicTable g6-table-all g6-small' id='musicTable' borde..."
}

事件属性包含所需的数据(您可以使用HtmlAgilityPack nuget包对其进行解析)。


专业硒:

  1. 易于互动
  2. 该行为与您在浏览器中看到的行为相同

缺点硒:

  1. 您需要安装chrome或其他浏览器
  2. 浏览器与您互动时正在运行
  3. 浏览器下载整个页面(图像,html,js,css ...)

专业手册:

  1. 您只加载所需的内容
  2. 不依赖于外部程序(即浏览器)

缺点手册:

  1. 您需要了解html / js的工作原理
  2. 您需要手动解析json / html

在这种情况下,我更喜欢第二种选择。

答案 1 :(得分:0)

了解有关C#的Selenium Automation工具,但是它将打开您要剪贴的每个网页,然后例如返回源代码或对该网页执行一些操作。

通常,此工具不是Web爬虫的(afaik),但一开始可能会很好,特别是如果您的dotnet核心应用位于某些虚拟机/泊坞窗上。

但是请注意,通过浏览器打开不安全的页面可能会有风险。

答案 2 :(得分:0)

您可能会尝试使用快手削皮特。 它允许您获取当前的HTML状态。

using (var page = await browser.NewPageAsync())
{
    await page.GoToAsync("http://www.spapage.com");
    var result = await page.GetContentAsync();
}

https://github.com/kblok/puppeteer-sharp