屏幕抓取站点到新的浏览器窗口

时间:2018-05-24 06:56:50

标签: asp.net screen-scraping

我不确定我所询问的是否可能。我有内部的Sharepoint站点,只能通过有效的凭据(Windows / SQL身份验证)访问。

从测试ASP.NET Web应用程序我执行登录屏幕抓取并获取_VIEWSTATE,__ CopyrightSTATEGENERATOR,__ EVENTVALIDATION等,然后提供凭据并准备好PostData并能够获取cookie并最终能够成功登录到安全页面。我得到了安全的页面html源代码。

现在,我需要在单独的浏览器窗口中启动它,以便安全页面按原样打开,然后所有页面链接都能正常工作。

当我在当前的Test ASP.NET Web应用程序中打开position:relative z-index:1 页面源(html)时。

任何建议?

1 个答案:

答案 0 :(得分:0)

也许为时已晚,但这是我的想法。

为了在新窗口中打开SharePoint网站(响应HTML),您可以将代码移动到另一个.aspx页上,该页专门用于执行屏幕抓取,仅此而已。回到原始的.aspx页面,使用Javascript在新窗口中打开第二个.aspx页面。新窗口将打开,屏幕抓取将进行处理。

<a href="javascript:void(0);" onclick="window.open("secondPage.aspx");">Click here to launch SharePoint</a>

如果SharePoint链接是相对的,则需要分析SharePoint响应并将所有相对链接替换为绝对链接。使用HTML Agility Pack可以很容易地实现这一点。此示例替换了src属性,但是可以对其进行修改以替换href属性:

Private Function MakeUrlsAbsolute(html As String) As String
    Dim doc As New HtmlDocument()
    Dim url As String
    Dim uri As Uri

    doc.LoadHtml(html)

    For Each node As HtmlNode In doc.DocumentNode.Descendants.Where(Function(d) d.Attributes.Contains("src")).ToList()
        url = node.GetAttributeValue("src", "")

        If Not String.IsNullOrWhiteSpace(url) Then
            uri = New Uri(url, UriKind.RelativeOrAbsolute)

            If Not uri.IsAbsoluteUri Then
                uri = New Uri(New Uri("https://www.yourSharePointSite.com/"), uri)

                node.SetAttributeValue("src", uri.ToString())
            End If
        End If
    Next

    Return doc.DocumentNode.OuterHtml
End Function