我正在编写一个PowerShell脚本,它会从一个内部网站上抓取一堆屏幕。我无法访问,也无法修改网站的源代码。
该脚本首先打开Internet Explorer(由于公司策略需要IE11),然后导航几页并根据从各个页面中删除的信息执行操作。一切似乎都很好。
在一个特定页面上,脚本必须在2个输入框中输入信息以生成超链接列表,然后使用click()选择其中一个超链接。超链接是void(0)的href,然后是onclick中的JavaScript函数。
<td align="left" class="wGNodeStyle">
<a href="javascript:void(0)" class="workgroupStyle" onclick="openWgMgmtWindow(2)">
JavaScript函数打开一个新窗口,并将一些用户信息提交到这个新窗口。
function openWgMgmtWindow(selIndex) {
document.getElementsByName("workgroupSo.groupId")[0].value = eval('document.all.wgGroupId'+selIndex+'.innerHTML');
document.getElementsByName("workgroupSo.primaryGroupId")[0].value = eval('document.all.wgGroupPrimary'+selIndex+'.innerHTML');
document.getElementsByName("actionString")[0].value = "Search";
var w = window.open("", document.forms['formManageWG'].target,winProps);
w.focus();
document.forms['formManageWG'].submit();
return false;
}
问题在于:
如果我在PowerShell之外打开Internet Explorer,可以通过单击其图标或直接运行可执行文件,导航到相关页面并单击超链接,将打开一个新窗口并显示预期的屏幕。即使我按照刚才描述的方式打开Internet Explorer并执行脚本,省略IE的脚本启动,只需找到IE对象,一切都会正常工作,并且会打开一个新窗口。
# & "$env:programfiles\Internet Explorer\iexplore.exe" 'https://www.ehpas.com'
$objEhpas = New-Object -comObject Shell.Application
do {
Start-Sleep -Milliseconds 500
$ieEhpas = @($objEhpas.windows() | ? {$_.locationName -like '*EHPAS Home Page*' })[0]
} while ($ieEhpas -eq $null)
但是,如果我让脚本启动Internet Explorer,当我点击超链接页面时,将打开一个新的空白窗口,然后还会在带有超链接页面的选项卡旁边打开一个新选项卡,其中包含的是应该在新窗口。我无法在流程中找到新标签,因此我无法控制它。
问题是,直接打开Internet Explorer与以编程方式打开Internet Explorer有什么区别?如何使程序版本的行为与直接版本相同?
我为长篇大论道歉。
答案 0 :(得分:0)
我终于找到了我的问题的答案。显然,这是Internet Explorer 11中的一个错误,它将无法修复。
https://connect.microsoft.com/IE/feedback/details/812072/ie-11-window-open-issue
我存在的问题是因为我在管理模式下运行PowerShell。将PowerShell作为“我自己”运行解决了IE如何打开的问题,但也引入了一些其他挑战。然而,那些,我应该能够编写我的出路。