Web Scraping с использованием C # - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь очистить ниже URL:

https://threatmap.checkpoint.com/ThreatPortal/livemap.html

Я очищаю ATTACKS СЕГОДНЯ, т.е. отображается как № 952, xxx.

Я написал ниже кодв C #

  public partial class Form4 : Form
{
    public Form4()
    {
        InitializeComponent();
        this.webBrowser1.ObjectForScripting = new MyScript();
    }

    private void Form4_Load(object sender, EventArgs e)
    {
        webBrowser1.Navigate("https://threatmap.checkpoint.com/ThreatPortal/livemap.html");
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.Navigate("javascript: window.external.CallServerSideCode();");
    }

    [ComVisible(true)]
    public class MyScript
    {
        public void CallServerSideCode()
        {
            var doc = ((Form4)Application.OpenForms[0]).webBrowser1.Document;
        }
    }
}

Но загрузка в браузер .NET занимает много времени, и кажется, что код зависает на долгое время.Любое решение, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

В данном конкретном случае вам даже не нужен безголовый браузер. Просто сделайте запрос с любой библиотекой, обертывающей cURL на вашем языке, и сделайте GET запрос к этой точке данных:

https://threatmap.checkpoint.com/ThreatPortal/rest/livemap/startup

, который дает этот хороший JSON на момент написания:

{ "topAttackingCountries": [ "США", "НЕТ", "TR", "CA", "DE", "BA", "CY", "NL", "FR", "SG"], "topTargetCountries": [ "В", "ID", "ES", "TW", "В.", "МХ", "США", "AU", "НГ", "НЕТ"], "todayTotalAttacks": 1149415 "yesterdayTotalAttacks": 6921731}

0 голосов
/ 14 мая 2018

Для получения номера НАПРАВЛЕНИЯ СЕГОДНЯ например. 952, xxx Вы можете использовать следующую Стратегию локатора :

string todayAttacksCount = driver.FindElement(By.XPath("//div[@class='pinkBorder' and @id='AttacksCountContainer']//following-sibling::h3[1]//strong")).GetAttribute("innerHTML");

Поскольку AUT JavaScript / Ajax на основе, вы можете потребовать WebDriverWait следующим образом:

IWebElement todayAttacksCount = new WebDriverWait(driver, TimeSpan.FromSeconds(3)).Until(ExpectedConditions.ElementExists(By.XPath("//div[@class='pinkBorder' and @id='AttacksCountContainer']//following-sibling::h3[1]//strong")));
Console.WriteLine(todayAttacksCount.GetAttribute("innerHTML"));
0 голосов
/ 14 мая 2018

HtmlAgilityPack имеет несколько замечательных функций для запроса содержимого html.Вы просто извлекаете html-код с помощью WebClient, а затем анализируете его с помощью HtmlAgilityPack http://html -agility-pack.net /

...