programing

Internet Explorer 엔진을 사용할 수 없기 때문에 응답 내용을 구문 분석할 수 없습니다.

subpage 2023. 5. 29. 10:54
반응형

Internet Explorer 엔진을 사용할 수 없기 때문에 응답 내용을 구문 분석할 수 없습니다.

파워셸을 사용하여 채널 9 시리즈를 다운로드해야 하지만 시도한 스크립트에 오류가 있습니다.

  1. 이 스크립트

    $url="https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
    $rss=invoke-webrequest -uri $url 
    $destination="D:\Videos\OfficePnP"
    [xml]$rss.Content|foreach{ 
      $_.SelectNodes("rss/channel/item/enclosure") 
    }|foreach{ 
        "Checking $($_.url.split("/")[-1]), we will skip it if it already exists in $($destination)"
      if(!(test-path ($destination + $_.url.split("/")[-1]))){ 
        "Downloading: " + $_.url 
        start-bitstransfer $_.url $destination 
      } 
    }
    

    오류로 인해 실패했습니다.

    Internet Explorer 엔진을 사용할 수 없거나 Internet Explorer의 첫 번째 시작 구성이 완료되지 않았기 때문에 응답 내용을 구문 분석할 수 없습니다.UseBasicParsing 매개 변수를 지정하고 다시 시도합니다.

  2. 저도 이거 먹어봤어요.

    # --- settings ---
    $feedUrl = "https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
    $mediaType = "mp4high"
    $overwrite = $false
    $destinationDirectory = join-path ([Environment]::GetFolderPath("MyDocuments")) "OfficeDevPnP"
    
    # --- locals ---
    $webClient = New-Object System.Net.WebClient
    
    # --- functions ---
    function PromptForInput ($prompt, $default) {
     $selection = read-host "$prompt`r`n(default: $default)"
     if ($selection) {$selection} else {$default}
    }
    
    function DownloadEntries {
     param ([string]$feedUrl) 
     $feed = [xml]$webClient.DownloadString($feedUrl)
    
     $progress = 0
     $pagepercent = 0
     $entries = $feed.rss.channel.item.Length
     $invalidChars = [System.IO.Path]::GetInvalidFileNameChars()
     $feed.rss.channel.item | foreach {
        $url = New-Object System.Uri($_.enclosure.url)
        $name = $_.title
        $extension = [System.IO.Path]::GetExtension($url.Segments[-1])
        $fileName = $name + $extension
    
        $invalidchars | foreach { $filename = $filename.Replace($_, ' ') }
        $saveFileName = join-path $destinationDirectory $fileName
        $tempFilename = $saveFilename + ".tmp"
        $filename
        if ((-not $overwrite) -and (Test-Path -path $saveFileName)) 
        {
            write-progress -activity "$fileName already downloaded" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
        }
        else 
        {
            write-progress -activity "Downloading $fileName" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
           $webClient.DownloadFile($url, $tempFilename)
           rename-item $tempFilename $saveFileName
        }
        $pagepercent = [Math]::floor((++$progress)/$entries*100)
      }
    }  
    
    # --- do the actual work ---
    [string]$feedUrl = PromptForInput "Enter feed URL" $feedUrl
    [string]$mediaType = PromptForInput "Enter media type`r`n(options:Wmv,WmvHigh,mp4,mp4high,zune,mp3)" $mediaType
    $feedUrl += $mediaType
    
    [string]$destinationDirectory = PromptForInput "Enter destination directory" $destinationDirectory
    
    # if dest dir doesn't exist, create it
    if (!(Test-Path -path $destinationDirectory)) { New-Item $destinationDirectory -type directory }
    
    DownloadEntries $feedUrl
    

    과오가 너무 많은.

    http://screencast.com/t/bgGd0s98Uc

웹 변수 " 호웹요서에매변개사오시십하용수를청출▁parameter오▁the▁use시▁in십사하▁your"를 사용합니다.-UseBasicParsing

예: 스크립트(라인 2)에서 다음을 사용해야 합니다.

$rss = Invoke-WebRequest -Uri $url -UseBasicParsing

설명서에 따르면 이 매개 변수는 IE가 설치되거나 구성되지 않은 시스템에 필요합니다.

DOM(Document Object Model) 구문 분석 없이 HTML 내용에 대해 응답 개체를 사용합니다.윈도우즈 서버 운영 체제의 서버 Core 설치와 같이 Internet Explorer가 시스템에 설치되지 않은 경우 이 매개 변수가 필요합니다.

스크립트를 수정하지 않고 작동하려면 다음과 같이 하십시오.

여기서 해결책을 찾았습니다. http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

IE가 아직 처음 시작되지 않아 아래 창이 뜨기 때문에 오류가 발생할 수 있습니다.시작하고 화면을 통과하면 오류 메시지가 더 이상 나타나지 않습니다.스크립트를 수정할 필요가 없습니다.

첫 번째 시작 시간

이 PowerShell 스크립트를 실행하여 Internet Explorer의 첫 번째 시작 구성을 실행할 필요가 없도록 설정할 수 있습니다. 그러면 해당 레지스트리 속성이 조정됩니다.

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 2

이 후에는 WebClient가 문제없이 작동합니다.

OS에 의해 Edge가 설치된 후(그리고 IE는 전혀 사용되지 않음 - 많은 사용자들이 새로운 Windows 설치 후 크롬을 선호하기 때문에) 로컬 호스트에서 다음을 사용하여 스크립트를 실행하려고 할 때

curl http://localhost:3000/

Luis가 언급한 것과 같은 오류 메시지가 수신되고 다음 오류 메시지가 표시됩니다.


curl http://localhost:3000/+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~카테고리정보: 구현되지 않음ed: (:) [Invoke-WebRequest], 지원되지 않음tedExceptionFullyQualifiedErrorIdIEDom지원되지 않음예외, 마이크로소프트.rShell.명령.웹 요청 명령 호출d

대신 사용하는 경우

Invoke-RestMethod  http://localhost:3000/

코드가 의도한 대로 작동합니다.

저는 Luis 코드를 정확하게 복제하려고 하지 않았지만, 여전히 저에게 효과가 있는 사용 사례입니다.

또한, 질문이 5년 이상 전에 던져졌고 최상의 답변이 선택되었기 때문에, 저는 여전히 다른 시나리오에서도 사용할 수 있는 독자들만을 위해 제 답변을 여기에 두기로 결정했습니다(예: nodejs에서 코드를 실행하고 새로운 브라우저 인스턴스를 여는 대신 더 빠르게 테스트하기 위해번째 터미널을 여는 경우).

Invoke-WebRequest 명령은 Internet Explorer 어셈블리에 종속되어 있으며 이 명령을 호출하여 기본 동작에 따라 결과를 구문 분석하기 때문입니다.Matt가 제안하는 것처럼 IE를 시작하고 처음 시작할 때 나타나는 설정 프롬프트에서 선택할 수 있습니다.그리고 당신이 경험하는 오류는 사라질 것입니다.

그러나 이는 IE를 시작한 사용자와 동일한 Windows 사용자로 파워셸 스크립트를 실행하는 경우에만 가능합니다.IE 설정은 현재 Windows 프로필 아래에 저장됩니다.따라서 저처럼 서버의 스케줄러에서 SYSTEM 사용자로 작업을 실행하면 이 작업이 수행되지 않습니다.

인수를 . 예를. -UseBasicParsing은 -UseBasicParsing입니다.$WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing

호출 웹 요청에서 매개 변수 -UseBasicParsing을 사용합니다.

예: 스크립트(라인 2)에서 다음을 사용해야 합니다.

$rss = Invoke-WebRequest -UseBasicParsing

설명서에 따르면 이 매개 변수는 IE가 설치되거나 구성되지 않은 시스템에 필요합니다.

DOM(Document Object Model) 구문 분석 없이 HTML 내용에 대해 응답 개체를 사용합니다.윈도우즈 서버 운영 체제의 서버 Core 설치와 같이 Internet Explorer가 시스템에 설치되지 않은 경우 이 매개 변수가 필요합니다.

Windows Server Core(Windows Server 2022 Core로 테스트됨):

요구 사항:Windows Server 언어 및 옵션 기능 ISO 이미지

먼저 윈도우즈 Core용 FOD를 설치하고 다시 시작합니다.

Add-WindowsCapability -Online -Name ServerCore.AppCompatibility~~~~0.0.1.0;

shutdown /r /t 0;

두 번째로 Windows Server Languages 및 옵션 기능 ISO 이미지를 마운트하여 IE 11을 설치합니다.

Add-WindowsPackage -Online -PackagePath "D:\LanguagesAndOptionalFeatures\Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~~.cab";

사용하다Get-PSDrive드라이브 문자를 확인합니다.

또는

Microsoft의 권장에 따라 Microsoft Edge를 설치합니다.

Invoke-WebRequest -UseBasicParsing -Uri "https://c2rsetup.officeapps.live.com/c2r/downloadEdge.aspx?platform=Default&source=EdgeStablePage&Channel=Stable&language=en"  -OutFile "MicrosoftEdgeSetup.exe"

Invoke-WebRequest가 PS에서 작동하지 않도록 차단하는 첫 번째 실행 구성 사용 안 함

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 2

Windows Server Core VM을 AD 도메인 서비스 역할과 함께 구축하고 내부적으로 -UseBasicPars 없이 Invoke-WebRequest를 사용하는 StarWars PowerShell 모듈을 사용하여 스타워즈 AD 캐릭터 스크립트에서 API/다운로드를 수행해야 했기 때문에 이 작업을 수행해야 했습니다.이것이 다른 사람들에게 도움이 되기를 바랍니다.

저도 이 문제가 있었고 -기본 구문 분석 사용이 일부에서는 작동하지만 실제로 돔과 상호 작용해야 하는 경우에는 작동하지 않습니다.그룹 정책을 사용하여 초기 구성 창이 나타나지 않도록 하면 파워셸이 더 이상 사용자를 막을 수 없습니다.

컴퓨터 구성 > 정책 > 관리 템플릿 > Windows 구성 요소 > Internet Explorer로 이동하여 첫 번째 실행 마법사 실행 방지 매개 변수를 사용으로 설정합니다.

선택 항목에서 "홈 페이지로 직접 이동"을 선택할 수 있습니다.

여기에 이미지 설명 입력

여기를 참조하십시오. https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

Internet Explorer(인터넷 익스플로러)를 열기만 하면 설정에 대한 팝업이 표시되고 권장 설정 사용, 확인 및 닫기를 클릭합니다.이제 괜찮아요.

또 다른 해결 방법은 레지스트리 업데이트입니다.저의 경우 GPO를 변경할 수 없었고 -UseBasicParsing은 웹사이트에 대한 액세스의 일부를 중단시킵니다.또한 로그인 권한이 없는 서비스 사용자가 있어서 사용자로 로그인하여 GUI를 실행할 수 없었습니다.
수정할 내용,

  1. 일반 사용자로 로그인하고 IE 설정을 실행합니다.
  2. 그런 다음 이 레지스트리 키를 내보냅니다. HKEY_USERS\S-1-5-21-....\소프트웨어\마이크로소프트\인터넷 익스플로러
  3. 저장된 .reg 파일에서 사용자 sid를 서비스 계정 sid로 바꿉니다.
  4. .reg 파일 가져오기

파일에서

저의 경우, 저는 간단히 변경해야 했습니다.curl로의 명령.Invoke-RestMethod오류가 사라졌습니다.

언급URL : https://stackoverflow.com/questions/38005341/the-response-content-cannot-be-parsed-because-the-internet-explorer-engine-is-no

반응형