2014-12-04 2 views
1

다음 내용으로 고생하고 있습니다.internetexplorer.application document.getElementByID는 null/Powershell을 반환합니다.

HTML 추출물을 보면 ID는 있지만 null 표현식을 계속 반환합니다. 불행히도 나는 웹 사이트에 대한 자세한 내용을 드릴 수 없습니다 ... 뭐가 잘못 되었는가?

--- HTML의 추출 ----

<input name="ctl00$mainCopy$LoginView$LoginControl$UserName" type="text" id="ctl00_mainCopy_LoginView_LoginControl_UserName" tabindex="1" class="txtBox" onchange="document.getElementById('ctl00_mainCopy_LoginView_LoginControl_PasswordResetLink').disabled 
= false;" style="width:150px;" /> 

--- 스크립트 ---

$ie = New-Object -com internetexplorer.application 
$ie.visible = $true 
$ie.navigate("excluded for security") 

$ie.document.getElementByID("ctl00_mainCopy_LoginView_LoginControl_UserName").Value= "excluded for security" 

---- 오류 ----

당신은 할 수 없습니다 null 값을 가지는 식의 메서드를 호출합니다. 줄에 : 1 문자 :. 1 + $ ie.document.getElementByID ("ctl00_mainCopy_LoginView_LoginControl_UserName") 버지니아 ... + ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : InvalidOperation (:) []의 RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

답변

0

이와 같이 $ie.navigate 명령 후에 잠을 가하고보십시오

while ($ie.Busy() -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 } 

요소를 가져 오려고하면 페이지가 계속로드되는 것 같습니다.

+0

나를 위해'$ ie.Busy'는 속성으로만 작동하며 코드 스 니펫과 같은 메소드 호출로 작동하지 않습니다. – esel

+0

맞습니다. 그 답을 쓴 이후로 변경되었을 수도 있습니다. –

0

이 문제는 here으로 해결되었습니다.

귀하의 URL은 '로컬 인트라넷'또는 '신뢰할 수있는 사이트'와 같은 보안 영역에 있다고 가정합니다. 이를 테스트하려면 코드를 "보안을 위해 제외되었습니다"대신 www.google.com으로 이동해보십시오.

IE 개체는 인터넷 영역 컨텍스트로 열립니다. (사용자가 아닌) 스크립트가 보안 영역에서 다른 영역으로 이동하지 못하게하는 영역 권한 보안 메커니즘이 있습니다. Zone Elevation Restrictions

추가 제한 사항이있는 경우 필요에 따라이 문제에 대한 여러 가지 해결책이 있습니다. 이러한 문제를 해결하려면 PowerShell을 Admin으로 시작하여 Admin으로 IE를여십시오. Other solutions by MS.

희망이 도움이됩니다.

관련 문제