source

C# http webrequest and javascript

manycodes 2023. 10. 28. 08:03
반응형

C# http webrequest and javascript

웹페이지의 데이터를 얻기 위해 C# HttpWebRequest를 사용하고 있습니다.문제는 페이지가 로드된 후 javascript/ajax를 사용하여 일부 데이터가 업데이트되어 응답 문자열에 입력되지 않는다는 것입니다.페이지의 모든 스크립트 실행이 완료될 때까지 웹 요청을 기다리는 방법이 있습니까?

감사해요.

아밋

그냥 좋은 생각이지만 .net이 브라우저에 있는 것처럼 웹페이지를 로드하는 방법이 있습니다: 시스템을 사용하는 것입니다.Windows.양식

웹 브라우저 컨트롤에 웹 페이지를 로드할 수 있습니다.

WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()

이것은 아마도 프리 아약스 DOM을 제공할 것이지만, 아약스를 먼저 실행할 수 있는 방법이 있을 것입니다.

제가 당신의 질문을 정확하게 해석한다면 당신의 문제에 대한 간단한 해결책은 없습니다.

서버에서 HTML을 스크랩하는 중인데 C# 코드가 실제 웹 브라우저가 아니기 때문에 클라이언트 스크립트를 실행하지 않습니다.

이렇게 하면 가져온 HTML에 포함되지 않은 정보에 액세스할 수 없습니다.

편집: 원래 웹 사이트에서 오는 이러한 AJAX 호출이 얼마나 복잡한지는 모르겠지만, IE용 Firebug 또는 Fiddler를 사용하여 요청이 어떻게 이루어지는지 확인하여 C# 애플리케이션에서도 이러한 AJAX 호출을 호출할 수 있습니다.따라서 필요한 정보를 추가할 수 있습니다.하지만 그건 이론적인 해결책일 뿐입니다.

웹 브라우저에서 웹 페이지를 열면 자바스크립트를 실행하고 페이지가 사용하는 추가 리소스(이미지, 스크립트 등)를 다운로드하는 브라우저입니다.HttpWebRequest 자체는 이 작업을 수행하지 않으며 요청한 페이지의 html만 다운로드합니다.javascript/ajax 코드를 자체적으로 실행하지 않습니다.

HttpWebRequest를 사용하여 페이지를 다운로드하고, 관련 ajax 정보에 대한 소스 코드를 프로그래밍적으로 검색한 다음 새로운 HttpWebRequest를 사용하여 해당 데이터를 풀다운합니다.

HttpWebRequest는 웹 브라우저를 에뮬레이트하는 것이 아니라 사용자가 가리키는 리소스를 다운로드할 뿐입니다.이것은 자바스크립트 파일을 실행하거나 다운로드하지 않을 것이라는 것을 의미합니다.

자바스크립트를 통해 풀링되는 데이터의 URL을 가져오려면 FireBug와 같은 것을 사용하고 HttpWebRequest를 가리켜야 합니다.

사용하다HttpWebRequest페이지를 다운로드합니다.소스 코드에서 관련 AJAX 정보를 검색한 다음 새 코드를 사용합니다.HttpWebRequest그 데이터를 끌어내릴 수 있을 겁니다

팬텀J를 사용할 수 있습니다.문제가 있었지만 문제 해결 방법을 찾지 못했습니다.제 생각에 가장 좋은 해결책은 이것입니다.

제 솔루션은 다음과 같습니다.

var page = require('webpage').create();

page.open("https://sample.com", function(){
    page.evaluate(function(){
        var i = 0,
        oJson = jsonData,
        sKey;
        localStorage.clear();

        for (; sKey = Object.keys(oJson)[i]; i++) {
            localStorage.setItem(sKey,oJson[sKey])
        }
    });

    page.open("https://sample.com", function(){
        setTimeout(function(){
         page.render("screenshoot.png") 
            // Where you want to save it    
           console.log(page.content); //page source
            // You can access its content using jQuery
            var fbcomments = page.evaluate(function(){
                return $("body").contents().find(".content") 
            }) 
            phantom.exit();
        },10000)
    });     
});

언급URL : https://stackoverflow.com/questions/516027/c-sharp-httpwebrequest-and-javascript

반응형