2017-12-01 11 views
2

다음과 같이 link이 있으며 Chrome을 통해 링크를 연 다음 페이지를 마우스 오른쪽 버튼으로 클릭 한 다음 "다른 이름으로 저장"을 선택하여 페이지를 HTML 파일 (c : \ temp \ cu2.html)에 저장합니다.PowerShell 또는 C#을 사용하여 웹 페이지를 HTML 파일로 저장하는 방법은 무엇입니까?

enter image description here

아래와 같이

enter image description here

이 저장 한 후, 나는 HTML 편집기 (VS2015 말)이 cu2.html 파일을 열 수 있습니다, 그리고 파일 안에 을 볼 수 있습니다, 태그가

그러나 링크를 열면 w IE11 (Chrome 대신)을 누른 다음 HTML 파일과 동일한 페이지를 저장하면이 태그를 전혀 찾을 수 없습니다. 사실 IE11에서 저장된 html 파일은 아래의 PowerShell 스크립트로 추출 할 수있는 내용과 같습니다.

#Requires -version 4.0 
$url = 'https://support.microsoft.com/en-us/help/4052574/cumulative-update-2-for-sql-server-2017'; 

$wr = Invoke-WebRequest $url; 
$wr.RawContent.contains('<table') # returns false 

$wr.RawContent | out-file -FilePath c:\temp\cu2_ps.html -Force; #same as the file saved from the webpage to html file in IE 

그래서 내 질문은 :

이 웹 페이지가 크롬 (html 파일로) 저장됩니다 왜

가 IE에서 다르다?

어떻게 PowerShell (또는 C#)을 사용하여 웹 페이지를 HTML 파일에 저장할 수 있습니까 (Chrome에 저장된 파일과 동일)?

미리 도움을 주셔서 감사합니다.

답변

3

이 페이지는 AngularJS와 jQuery를 사용합니다. 문서 준비가 완료되면 일부 내용이로드됨을 의미합니다. 따라서 Invoke-WebRequest을 사용하여 요청을 보내면 페이지의 원본 콘텐츠 만 수신됩니다. 잠시 후 다른 내용이로드됩니다.

이 문제를 해결하기 위해 예상 결과를 얻기 위해 IE를 자동화 할 수 있습니다.

$ie = new-object -ComObject "InternetExplorer.Application" 
$url = "https://support.microsoft.com/en-us/help/4052574/cumulative-update-2-for-sql-server-2017" 
$ie.silent = $true 
$ie.navigate($url) 
while($ie.Busy) { Start-Sleep -Milliseconds 100 } 
Start-Sleep 10 
$ie.Document.documentElement.innerHTML > "C:\Tempfiles\output.html" 
$ie.Stop() 
$ie.Quit() 
+0

정말 작동합니다! 고마워 레자. 다른 한편으로는 (나는 너무 많이 요구하고 있습니다.) IE가 설치되어 있지 않은 환경에서 사용할 수있는 솔루션이 무엇인지 생각해보십시오. (내 환경에서는 IE는 서버에 설치할 수 없습니다). 그럼에도 불구하고 나는 해결책으로 당신의 해결책을 투표하고 당신에게 현상금 점수를 20 시간 안에 줄 것입니다. (시스템이 지금 당신에게 점수를 줄 수 없기 때문에). 큰 도움을 주셔서 다시 한 번 감사드립니다. – jyao

+0

브라우저가 없으면 "할 수 없습니다."입니다. 자바 스크립트를 실행하고 DOM을 조작하려면 스크립트 엔진과 DOM 엔진 등이 필요하기 때문입니다. –

+0

그러나 Chrome과 같이 자동화를 위해 다른 브라우저를 사용하려는 경우 [CefSharp] (https://cefsharp.github.io)를 사용하여 신뢰할 수 있습니다. Windows Forms에서 사용했습니다. 즉, PowerShell에서도 사용할 수 있습니다. 최악의 경우, CefSharp를 사용하여 C# 프로그램을 작성할 수 있습니다. 그러나 IE가 허용되지 않는 환경에서는 CefSharp를 사용하는 것이 위험을 무릅 쓰고 있다고 생각합니다. 사실 CefSharp에 관한 이야기는 아닙니다. 사실 다른 모든 제 3 자 브라우저들입니다. –

0

당신은 다운로드 및 HTML을 저장 Selenium.WebDriverSelenium.Chrome.WebDriver 패키지를 사용할 수 있습니다 : 그것은 AngularJS와 로직 및 다운로드에 필요한 내용을 실행하기 위해 준비 페이지 호텔 fr 기다려도 조금 기다려야 충분 다음 문서 요소의 콘텐츠를 콘텐츠 :

var service = ChromeDriverService.CreateDefaultService(); 
service.HideCommandPromptWindow = true; 
var options = new ChromeOptions(); 
options.AddArgument("headless"); 

using (var driver = new ChromeDriver(service, options)) 
{ 
    driver.Url = "https://support.microsoft.com/en-us/help/4052574/cumulative-update-2-for-sql-server-2017"; 
    File.WriteAllText("cu2_ps.html", driver.PageSource); 
} 

하지만 크롬을 설치해야합니다. IE 드라이버도 사용할 수 있지만 다른 대답에서 제안 된대로 IE COM 자동화를 사용하는 것이 좋습니다.

+0

Andrii, Visual Studio 2015 대화 형 창에서 코드를 실행합니다. 결과는 여전히 내 질문에있는 것과 같습니다. 즉,

태그가 전혀 없습니다. 언뜻보기에는 IE를 다룰 필요가 없으므로 솔루션이 정말 마음에 듭니다. IE가 설치되지 않은 곳에서는 매우 깨끗하며 사용할 수 있습니다. 그러나 불행히도, 해결책은 작동하지 않습니다. – jyao

+0

@jyao 방금 HTML을 열었습니다. 404 페이지가 없기 때문에 내용이 없습니다. 나는 여기에 게시하기 전에 확인 했어야했다. 좀 더 조사하겠습니다. –

+0

@jyao, 렌더링 할 내용에 대해 스크립트를 실행해야합니다. 대체 솔루션은 Selenium webdriver를 사용하는 것이지만 IE COM 자동화의 제안 된 접근 방식과 크게 다르지는 않습니다. 건배. –