【问题标题】:Programmatically open webpage from file and click link to handle response C#以编程方式从文件打开网页并单击链接以处理响应 C#
【发布时间】:2019-03-08 10:32:17
【问题描述】:

场景是邮件被发送到收件箱。附加到邮件的是一个 html 文件,用户单击该文件以在浏览器中打开页面。然后他们点击网页上的链接,在线打开 PDF 文件。

现在,我想用 c# 以编程方式实现的是将附加的 html 文件保存在磁盘上,打开文件,找到链接,单击它并将打开的文件保存到磁盘。

我已经以编程方式打开电子邮件并将附加的 html 文件保存到磁盘。但现在我有点坚持以编程方式打开文件。 我已经创建了一个 FileWebRequest 来打开文件,但我不知道如何找到链接(“a”标签,仅在整个页面上)并以编程方式单击它(在 c# 中)以便打开 PDF所以我可以下载它并保存到磁盘。

filewebrequest之后需要做什么?

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

【问题讨论】:

    标签: c# html .net hyperlink click


    【解决方案1】:

    首先,您应该使用 RegEx 从 html 内容中提取 PDF URL,然后使用 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")
    

    【讨论】:

    • 好建议,但我需要单击链接,因为 onclick 附加了一个 javscript,它可以打开 pdf。可以这么说,href 中没有指向 PDF 的链接,但链接看起来像这样:57057.pdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2021-12-25
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多