我正在PowerShell中编写一个脚本,该脚本应从一个网站获取并将其写入TXT文件。我实际上是在创建新的TXT文件并打开Internet Explorer。
我的代码:
# Create TXT file that containing one title per line
If (Test-Path "$env:USERPROFILE/titles.txt")
{
Remove-Item "$env:USERPROFILE/titles.txt"
}
New-Item -name "titles.txt" -path "$env:USERPROFILE" -type file
# Create an Internet Explorer com object
$URL = "geekweek.pl"
$ie = New-Object -com InternetExplorer.Application
$ie.visible = $true
$ie.navigate($URL)
$doc = $ie.Document
# Download title and save it into TXT file
#$elm = $doc.getElementsById("today-article")
#$ta = ($URL.AllElements | ? { $_.Class -eq 'tip' } | select innerText)
#$ta = Get-Content ($URL.Links|where href -match '/#aktualnosci/')
#Write-Host $ta
我尝试通过部分href获取Id,类和元素(在评论中允许这样做)。有人可以告诉我我做错了什么以及我能做些什么来完成我的剧本?
答案 0 :(得分:1)
修改
$URL = "geekweek.pl"
$ie = New-Object -com InternetExplorer.Application
$ie.visible = $true
$ie.navigate($URL)
$doc = $ie.Document
$today = $doc.getElementsByName("today-article") | Select-Object -ExpandProperty outertext
我收到的输出是
Temat dnia
Miniaturowy akcelerator cząstek
答案 1 :(得分:1)
在尝试获取之前,您需要等待Internet Explorer加载必要的元素。导航到网页后,您可以使用以下行:while ($ie.Busy -eq $true) { Start-Sleep 1 }
来实现此目的。
此外,您错误地使用了getElementsById
,它应该是getElementById
(没有')。
答案 2 :(得分:1)
您没有给IE足够的时间来加载和解析页面。
$ie.navigate($URL);
$doc = $ie.Document;
这里发生的是你告诉IE导航到该页面,但该操作是异步的 - 该方法在页面加载之前返回。因此,没有文件可供阅读。
告诉IE导航后,您需要停止脚本直到加载完毕。
$ie.navigate($URL);
while ($ie.ReadyState -ne 4) {
start-sleep -seconds 1;
}
$doc = $ie.Document;
MSDN documentation for ReadyState
加载页面后,您就可以开始寻找您的标题了。只有一个ID为today-article
的元素(根据定义,只能有一个具有给定ID的元素),要获得它,您需要使用$doc.getElementById('today-article');
(注意没有 s 在方法名称中)。一旦你进入那个目的,那就是走更多的DOM树来找到你正在寻找的那个节点的孩子。
确保在完成后终止IE。让跑步过程落后并不行。