如何通过PowerShell获取新闻标题?

时间:2014-11-12 11:45:17

标签: internet-explorer powershell

我正在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,类和元素(在评论中允许这样做)。有人可以告诉我我做错了什么以及我能做些什么来完成我的剧本?

3 个答案:

答案 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。让跑步过程落后并不行。