Загрузить все файлы PDF по просканированным ссылкам - PullRequest
0 голосов
/ 07 января 2020

Во время выполнения кода он говорит, что ProductListPage равен нулю и после сброса ошибка не переходит вперед.

Есть идеи, как решить эту проблему? Подождите, пока //div[@class='productContain padb6']//div[@class='large-4 medium-4 columns']/a не будет найдено или что-то еще?

Вот мой текущий код:

HtmlDocument htmlDoc = new HtmlWeb().Load("https://example.com/");
HtmlNodeCollection ProductListPage = htmlDoc.DocumentNode.SelectNodes("//div[@class='productContain padb6']//div[@class='large-4 medium-4 columns']/a");
foreach (HtmlNode src in ProductListPage)
{
    htmlDoc = new HtmlWeb().Load(src.Attributes["href"].Value);

    HtmlNodeCollection LinkTester = htmlDoc.DocumentNode.SelectNodes("//div[@class='row padt6 padb4']//a");
    if (LinkTester != null)
    {
        foreach (var dllink in LinkTester)
        {
            string LinkURL = dllink.Attributes["href"].Value;
            Console.WriteLine(LinkURL);

            string ExtractFilename = LinkURL.Substring(LinkURL.LastIndexOf("/"));
            var DLClient = new WebClient();

            DLClient.DownloadFileAsync(new Uri(LinkURL), @"C:\temp\" + ExtractFilename);
        }
    }
}

РЕДАКТИРОВАТЬ:

Код Кажется, работает без VPN-подключения, однако он не работает с VPN. У меня есть альтернатива, сделанная с использованием Python и BeautifulSoup, и она работает независимо от VPN-соединения. Есть ли идея, почему C# и htmlAgilityPack не справляются?


EDIT2:

Я заметил, что на странице VPN-соединения загружается с небольшая задержка Первая страница загружается, а затем идет содержание.

Ответы [ 2 ]

1 голос
/ 07 января 2020

Убедитесь, что у вас есть доступ к сайту (возможно, брандмауэр или другое приложение не разрешает доступ).

Когда я запускаю ваш код, Visual Basi c и. Net Я могу попасть на подсайты и даже посмотреть ссылки в формате PDF. Я бы порекомендовал использовать отладчик для

  1. Проверьте, можете ли вы получить доступ к сайту в вашем браузере.
  2. Если вы можете получить доступ к сайту, используйте отладчик, чтобы увидеть, что Inner Html вам иметь для htmlDoc.DocumentNode
  3. Если вы получаете данные, скопируйте их в Блокнот и посмотрите, есть ли теги. У вас должно быть полное HTML Do c.
  4. Для прокси-сервера добавьте информацию к вызову загрузки. { ссылка }
0 голосов
/ 09 января 2020

Примерно через 2 месяца поиска и чтения, наконец, есть решение. Добавление этого к app.config сработало для меня без необходимости каких-либо изменений кода:

<system.net>
   <defaultProxy useDefaultCredentials="true" />
</system.net>

, поэтому мой app.config теперь выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
</configuration>

Пожалуйста, дайте оригинальные ответы за это! { ссылка }

...