2012-06-04 2 views
7

문서를 문자열 형식으로 사용하거나 DOM을로드 한 다음 jquery 선택기를 포함한 javascript 함수를 실행하고 싶습니다. 이 과정에서 클라이언트/브라우저가 전혀없는 서버 측이 될 것입니다.DOM을로드하고 .Net과 함께 서버 측 JavaScript 실행

기본적으로 dom을로드 한 다음 jquery 선택기와 text() & val() 함수를 사용하여 문자열을 추출해야합니다. 나는 정말로 돔을 조작 할 필요가 없다.

나는 쥬라기와 Jint와 같은 .Net 자바 스크립트 엔진을 보았지만 DOM로드가 지원되지 않으므로 필요한 것을 할 수 없다.

.Net 솔루션 (node.js, ruby ​​등)은 존재하지 않지만 실제로는 .Net을 선호한다고 생각합니다.

아래의 편집 좋은 대답이지만, 현재 내가 쥬에 포트 envjs를 시도하고있어, 다른 경로를 시도하고있다. 내가 그 일을하게되면 내가 원하는 것을 할 수 있다고 생각한다. ...

+0

어떻게됩니까? 나는 내 자신의 시도를했으나 당분간은 교착 상태에 빠져 있기 때문에 그런 프로젝트에 도움이되거나 기여할 수 있습니다. 원한다면 @gmail을 추가하십시오.com을 내 SO 이름으로 보내 주시면 거기에 연락하실 수 있습니다. Jurassic에 ActiveX를 추가하는 JavaScript 프로젝트가 있습니다. jurascript.codeplex.com – aikeru

답변

12

대답은 당신이하려는 일에 달려있다. 목표가 기본적으로 완전한 웹 브라우저 시뮬레이션 또는 "헤드리스 브라우저"인 경우 많은 솔루션이 있지만 .NET에서 깔끔하게 존재하는 솔루션은 없습니다. 브라우저를 모방하려면 자바 스크립트 엔진과 DOM이 필요합니다. 몇 가지 엔진을 확인했습니다. 나는 쥬라기가 가장 견고하고 빠른 것으로 나타났습니다. Google 크롬 V8 엔진도 매우 인기가 있습니다. Neosis Javascript.NET 프로젝트는 .NET 래퍼를 제공합니다. 비 순수한 .NET이 아니기 때문에 .NET이 아닌 .NET 의존성이 있지만 깔끔하게 통합되어 사용하기가 어렵지 않습니다.

앞에서 언급했듯이 여전히 DOM이 필요합니다. 순수한 C#에는 XBrowser이 있지만 조금 더 오래된 것처럼 보입니다. jsdom과 같은 전체 브라우저 DOM의 자바 스크립트 기반 표현도 있습니다. 쥬라기에서 jsdom을 실행하여 브라우저가없는 DOM 시뮬레이션을 C# (모두 매우 천천히!)에서 실행할 수 있습니다. 확실히 V8에서 정상적으로 실행됩니다. .NET 영역 외부에 있다면 더 잘 지원되는 다른 솔루션이 있습니다. This question에서 HtmlUnit에 대해 설명합니다. 실제 웹 브라우저 자동화를위한 Selenium이 있습니다.

또한이 도구를 사용하여 수행 한 많은 작업이 테스트 용이라는 점에 유의하십시오. 그렇다고해서 다른 용도로 사용할 수 없다는 의미는 아니지만 인라인 코드에서 안정적으로 사용하기 위해 수행하거나 통합하지 못할 수도 있습니다. 기본적으로 실시간 HTML 조작을 시도하는 경우 테스트를 제외하고 널리 사용되지 않는 많은 기술을 혼합 한 솔루션은 좋지 않은 선택 일 수 있습니다.

실제로 HTML 조작이 필요하고 실제로 자바 스크립트를 사용할 필요는 없지만 JS에서 사용할 수있는 풍부한 도구에 대해 더 많이 생각하고 있다면이 용도로 설계된 C# 도구를 살펴볼 것입니다. 예를 들어 HTML Agility Pack 또는 내 프로젝트 CsQuery (C# jQuery 포트)입니다.

기본적으로 클라이언트 용으로 작성된 코드를 서버에서 실행하려고합니다. 정교하고/가속화 된 웹 스크 레이 핑을 위해 - 나는이 용어들을 사용하여 검색 할 것입니다. 예를 들어, this question은 헤드 룸없는 웹킷 브라우저 스택 인 PhantomJS을 비롯하여 앞에서 언급 한 테스트 도구 중 일부를 포함하여 이에 대해 설명합니다. 웹 스크래핑의 경우 .NET 없이도 사용할 수 있다고 상상합니다. 어쨌든 합리적인 유일한 대답 일 수 있습니다.

+0

CsQuery가 jurassic (작은 래퍼 레이어)의 DOM 역할을 할 수 있습니까? – mcintyre321

+0

C#은 강력한 형식의 언어이고 javascript는 아니기 때문에 CsQuery의 DOM 구현은 브라우저와 매우 다릅니다. 이 목적을 위해 이미 자바 스크립트로 작성된 jsdom을 사용하는 것이 훨씬 쉬울 것입니다. 이론적으로는 jurassic으로 실행해야합니다. 이전에 누군가 시도했는지는 알 수 없습니다. (실제로 CsQuery의 jsdom에서 단위 테스트를 빌리기 시작했습니다.) –

+0

나는 이것에 대해 조사 해왔다. 쥬라기가 아닌 필요한 몇 가지가 있지만, 필요한 비트와 멍청이가있는 자바 스크립트라는 또 다른 프로젝트가있다. http://jurassic.codeplex.com/discussions/360450 – mcintyre321