我不确定我所询问的是否可能。我有内部的Sharepoint站点,只能通过有效的凭据(Windows / SQL身份验证)访问。
从测试ASP.NET Web应用程序我执行登录屏幕抓取并获取_VIEWSTATE,__ CopyrightSTATEGENERATOR,__ EVENTVALIDATION等,然后提供凭据并准备好PostData并能够获取cookie并最终能够成功登录到安全页面。我得到了安全的页面html源代码。
现在,我需要在单独的浏览器窗口中启动它,以便安全页面按原样打开,然后所有页面链接都能正常工作。
当我在当前的Test ASP.NET Web应用程序中打开position:relative
z-index:1
页面源(html)时。
任何建议?
答案 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