Программно открыть веб-страницу из файла и щелкнуть ссылку для обработки ответа C # - PullRequest
0 голосов
/ 03 октября 2018

Сценарий таков, что письмо отправляется в почтовый ящик.К письму прилагается HTML-файл, который пользователь щелкает, чтобы открыть страницу в браузере.Затем они нажимают на ссылку на веб-странице, которая открывает PDF-файл онлайн.

Теперь, что я хочу достичь программным способом с помощью c #, это сохранить прикрепленный html-файл на диске, открыть файл, найти ссылку, нажатьи сохраните файл, который открывается на диск.

Я дошел до программного открытия электронной почты и сохранения прикрепленного файла html на диск.Но теперь я застрял при открытии файла программно.Я дошел до создания FileWebRequest для открытия файла, но я не знаю, как найти ссылку (тег «a», только на всей странице) и программно щелкнуть по ней (в c #), чтобы открыть PDFтак что я могу скачать его и сохранить на диск.

Что нужно сделать после filewebrequest?

FileWebRequest req = (FileWebRequest)WebRequest.Create(pathToHtmlFile);
FileWebResponse res = (FileWebResponse)req.GetResponse();
// What now..?

1 Ответ

0 голосов
/ 03 октября 2018

Сначала вы должны извлечь URL-адрес PDF с помощью RegEx из содержимого html, а затем загрузить его с помощью WebClient:

    private static string FindPdfFileDownloadLink(string htmlContent)
    {
        return Regex.Match(htmlContent, @"^(https?:\/\/)?www\.([\da-z\.-]+)\.([a-z\.]{2,6})\/[\w \.-]+?\.pdf$").Value;
    }

    public static int Main(string[] args)
    {
        string htmlContent = File.ReadAllText("1.html");
        string pdfUrl = FindPdfFileDownloadLink(htmlContent);

        using (WebClient wClient = new WebClient())
        {
            wClient.DownloadFile(pdfUrl, @"1.pdf");
        }

        Console.Read();
        return 0;
    }

, если вы действительно хотите нажать на ссылку по любой причине, вы можете загрузить html вскрытый веб-браузер, найдите нужный элемент и щелкните по нему.

Чтобы загрузить содержимое в элемент управления WebBrowser:

webBrowser1.Navigate(@"1.html");

, а также найти и щелкнуть элемент:

HtmlElement link = webBrowser.Document.GetElementByID("link_id_58547")
link.InvokeMember("Click")
...