powershell - HTMLagilityPack 结合 Powershell、Windows 身份验证

标签 powershell html-agility-pack

所以我有一个叫做 lansweeper 的工具。它在本地服务器上运行。现在我想从中抓取一个页面,但它使用 Windows 身份验证。 我使用 Powershell 作为脚本语言。 我主要使用 HTMLAgilityPack 来抓取。但我从未抓取过使用 Windows 身份验证的页面。

有谁知道我如何通过它传递我的凭据?以便它在某些凭据下打开页面? (比如我的管理员帐户而不是我的普通帐户)。 (是的,我可以将我的普通用户添加到 Lansweeper 中允许的用户,但这不是我想使用的解决方案)。

我已经尝试了以下但它不起作用。

[Reflection.Assembly]::LoadFile("C:\Scraping\HtmlAgilityPack\lib\Net45\HtmlAgilityPack.dll”)
[HtmlAgilityPack.HtmlWeb]$web = @{}
$webclient = new-object System.Net.WebClient
$username = "user"
$password = "passw0rd-"
$domain = "mydomain"
$webclient.Credentials = new-object System.Net.NetworkCredential($username, $password, $domain)
[HtmlAgilityPack.HtmlDocument]$doc = $web.Load("http://lansweeper:81/user.aspx?username=sam&userdomain=mydomain","","",$webclient.Credentials) 
[HtmlAgilityPack.HtmlNodeCollection]$nodes = $doc.DocumentNode.SelectNodes("//body")

我一直在研究函数并发现了两种可能性:

TypeName   : HtmlAgilityPack.HtmlWeb
Name       : Load
HtmlAgilityPack.HtmlDocument Load(string url), 
HtmlAgilityPack.HtmlDocument Load(string url, string proxyHost, int proxyPort, string userId, string password), 
HtmlAgilityPack.HtmlDocument Load(string url, string method), 
HtmlAgilityPack.HtmlDocument Load(string url, string method, System.Net.WebProxy proxy, System.Net.NetworkCredential credentials)

Name       : Get
MemberType : Method
void Get(string url, string path), 
void Get(string url, string path, System.Net.WebProxy proxy, System.Net.NetworkCredential credentials), 
void Get(string url, string path, string method), 
void Get(string url, string path, System.Net.WebProxy proxy, System.Net.NetworkCredential credentials, string method)

但我无法让其中之一工作。有人用 Powershell 做过吗?

最佳答案

我找到了如何去做:我希望它能帮助将来的人。 这不是直接就能弄清楚的,但一旦你看到它就很容易了。

[Reflection.Assembly]::LoadFile("C:\temp\HtmlAgilityPack\lib\Net45\HtmlAgilityPack.dll") | Out-Null
[HtmlAgilityPack.HtmlWeb]$web = @{}
$url = "http://lansweeper:81/user.aspx?username=sam&userdomain=mydomain"
$webclient = new-object System.Net.WebClient

    $cred = new-object System.Net.NetworkCredential
    $defaultCredentials =  $cred.UseDefaultCredentials

$proxyAddr = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
$proxy = new-object System.Net.WebProxy
$proxy.Address = $proxyAddr
$proxy.useDefaultCredentials = $true 
$proxy

[HtmlAgilityPack.HtmlDocument]$doc = $web.Load($url,"GET","$proxy",$defaultCredentials ) 
[HtmlAgilityPack.HtmlNodeCollection]$nodes = $doc.DocumentNode.SelectNodes("//html[1]/body[1]")

$nodes

<# USER RESOURCES
https://msdn.microsoft.com/en-us/library/system.net.webclient.usedefaultcredentials(v=vs.110).aspx
https://forums.asp.net/t/2027997.aspx?HtmlAgilityPack+Stuck+trying+to+understand+HtmlWeb+Load+NetworkCredential
https://msdn.microsoft.com/en-us/library/system.net.webclient.usedefaultcredentials.aspx
https://stackoverflow.com/questions/571429/powershell-web-requests-and-proxies

TypeName   : HtmlAgilityPack.HtmlWeb
Name       : Load
HtmlAgilityPack.HtmlDocument Load(string url, string proxyHost, int proxyPort, string userId, string password), 
HtmlAgilityPack.HtmlDocument Load(string url, string method, System.Net.WebProxy proxy, System.Net.NetworkCredential credentials)
#>

关于powershell - HTMLagilityPack 结合 Powershell、Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928536/

相关文章:

c# - 有没有办法使用 HTMLAgilityPack 将 html 节点替换为文本节点?

arrays - Powershell验证我的数组元素类型

powershell - Powershell cmdlet忽略数组参数

C# 编码 Shift-JIS 与 utf8 html 敏捷包

javascript - 如何将 HtmlAgilityPack.CssSelectors 公开到 ClearScript 中

c# - 使用 C# 从网页中抓取 JSON

windows - 有没有办法使用 PowerShell 检查本地服务器上任意安全主体的管理权限?

.net - PowerShell无法从ASP.NET DLL调用简单函数

powershell - 从特定坐标的 CSV 文件中获取值

c# - HtmlAgilityPack WebGet.Load 给出错误 "Object reference not set to an instance of an object"