【发布时间】:2016-10-22 15:42:30
【问题描述】:
几天前我升级到了 Windows 10,但我无法让我的一个脚本运行。这个简单的独立脚本演示了这个问题:
$erroractionpreference = "Continue"
$ie = New-Object -ComObject InternetExplorer.Application
$ie.visible = $True
$url = "http://gtr1.backtest.org/2013/?sp500.a:et1"
$ie.Navigate($url)
while ($ie.busy) {Start-Sleep 1}
$backtest = $ie.document.getElementsByName("submit") |
Where-Object {$_.value -eq "Run Backtest"}
$backtest.click() #shows SP500 backtest results
while ($ie.busy) {Start-Sleep 1}
$screener = $ie.document.getElementsByName("submit") |
Where-Object {$_.value -eq "Run Screener"}
$screener.click() #shows list of SP500 stocks
while ($ie.busy) {Start-Sleep 1}
程序通过一个简单的屏幕导航到一个股票回测网站,点击“运行回测”按钮,这部分工作正常;我可以在可见的 IE 会话中查看进度。应该发生的是,然后单击“运行筛选器”按钮并显示 SP500 股票列表。
但显然,更新后的(第一次点击后)网站信息并没有返回到脚本中。一两次我看到一个 RPC DISCONNECTED 类型错误,但我无法重现它。这是通常的错误消息:
HRESULT 异常:0x800A138A
在 C:\Users\MD\OneDrive\Documents\Mechanical Investing\GTR1\Daily Runs\Temp1.ps1:12 char:1
+ $screener = $ie.document.getElementsByName("提交") |哪里对象 { ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
所以初始导航到网站,第一个按钮点击工作正常,但第二个没有。我是否以管理员身份运行都没有关系,它在命令提示符下不起作用。我有一个类似的脚本在 Windows 7 上运行了很长时间,没有任何问题。我确实在防火墙设置中将 PowerShell 添加为允许的应用程序,但这并没有帮助。
有什么想法吗?
【问题讨论】:
-
您标题中的故障排除尝试误导了人们。我重命名了它,希望它更合适。
-
如果您将睡眠限制更改为更高的值(例如 3-5 秒),它会改变吗? Windows 10 也可能不是问题所在。这个脚本可以在其他机器上运行吗?
-
谢谢马特。我确实尝试过增加睡眠限制而没有改变。不,我这里没有另一台机器可以试一试。我想知道这是否是非 Win10 的问题,但我在这台装有 Win7 的计算机上运行了一年非常相似的脚本,升级后我就遇到了这个问题。所以我怀疑一些防火墙类型的问题,但可能是错误的。 Win10 还带有 Powershell 5.0,在我有 4.0 IIRC 之前。
-
秒数的建议无论如何都是愚蠢的(最好是 1 秒)。您是否能够禁用防火墙进行测试以将其作为问题的根源包含或排除?
-
PowerShell change list 声称:Windows PowerShell 5.0 包含一个新的 COM 实现,当您使用 COM 对象时,它可以显着提高性能。 也许它与您的问题有关。
标签: powershell com windows-10 powershell-5.0