2012-01-23 31 views
7

Có một trang web báo cáo có nội dung tôi muốn phân tích cú pháp trong C#. Tôi đã thử tải xuống html với WebClient nhưng sau đó tôi không nhận được nguồn hoàn chỉnh vì hầu hết được tạo thông qua js khi tôi truy cập trang web.Tải xuống js đã tạo html với C#

Tôi đã thử sử dụng WebBrowser nhưng không thể làm cho nó hoạt động trong ứng dụng bảng điều khiển, ngay cả sau khi sử dụng Application.Run() và SetApartmentState (ApartmentState.STA).

Có cách nào khác để truy cập vào html được tạo này không? Tôi cũng đã nhìn vào mshtml nhưng không thể tìm ra.

Cảm ơn

Trả lời

3

Javascript được thực thi bởi trình duyệt. Nếu ứng dụng giao diện điều khiển của bạn nhận được JS, thì nó hoạt động như mong đợi và những gì bạn thực sự cần là dành cho ứng dụng giao diện điều khiển của bạn để thực thi mã JS đã được tải xuống.

+0

Tôi đã kết thúc với điều này, nhưng nó là một rắc rối để thực hiện nó. Cảm ơn – lander16

3

Bạn có thể sử dụng trình duyệt không có đầu - XBrowser máy chủ có thể.

Nếu không, hãy thử HtmlUnit như được mô tả trong this blog post.

+0

Quên đề cập đến, tôi không thể sử dụng bất kỳ thư viện bên ngoài nào. Nếu không thì điều này sẽ rất tuyệt. Cảm ơn – lander16

+0

@ lander16 - Sau đó, "WebBrowser' là lựa chọn duy nhất của bạn. http://stackoverflow.com/questions/5519294/getting-webbrowser-control-to-work-in-console-application – Oded

0

Chỉ cần nhận xét ở đây. Không nên có bất kỳ sự khác biệt nào giữa việc thực hiện một yêu cầu HTTP với một số mã C# và yêu cầu được tạo ra bởi một trình duyệt. Nếu trang web mục tiêu bị nhầm lẫn và không tạo đánh dấu chính xác vì nó không thể tạo đầu hoặc đuôi từ loại trình duyệt, thì nghĩ rằng nó đang phân phối thì có thể tất cả những gì bạn phải làm là đặt tác nhân người dùng như vậy:

((HttpWebRequest)myWebClientRequest).UserAgent = "<a valid user agent>"; 

Ví dụ, user agent hiện tại của tôi là:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 

có lẽ một khi bạn làm điều đó trang web sẽ hoạt động chính xác. Có thể có các yếu tố khác tại nơi làm việc ở đây, chẳng hạn như liên kết giới thiệu, v.v. nhưng tôi sẽ thử điều này trước và xem nó có hoạt động không.

+0

Lý do anh ấy không nhận được những gì anh ta mong đợi là do JavaScript thực thi trên trang web. HttpWebRequest sẽ không thực thi JavaScript. Anh ấy đang đi đúng hướng với WebBrowser. – SoWeLie

0

Đặt cược tốt nhất của bạn là từ bỏ tuyến ứng dụng giao diện điều khiển và tạo ứng dụng Windows Forms. Trong trường hợp đó WebBrowser sẽ làm việc mà không cần bất kỳ công việc nào cần thiết.

Các vấn đề liên quan