2012-07-09 35 views
10

Tôi đang cố gắng xóa một trang web cụ thể hoạt động như sau.Chạy tập lệnh trong HtmlAgilityPack

Trước tiên trang tải, sau đó nó chạy một số loại javascript để tìm nạp dữ liệu cần thiết để điền trang. Tôi quan tâm đến dữ liệu đó.

Nếu tôi nhận trang bằng HtmlAgilityPack - tập lệnh không chạy để tôi có được trang chủ yếu là trang trống.

Có cách nào để buộc nó chạy tập lệnh, vì vậy tôi có thể lấy dữ liệu không?

+0

xem http://phantomjs.org/ –

Trả lời

9

Bạn đang nhận được máy chủ đang quay trở lại - giống như trình duyệt web. Một trình duyệt web, tất nhiên, sau đó chạy các kịch bản. Gói Agility Html chỉ là một trình phân tích cú pháp HTML - nó không có cách nào để giải thích javascript hoặc liên kết nó với đại diện bên trong của tài liệu. Nếu bạn muốn chạy kịch bản, bạn sẽ cần một trình duyệt web. Câu trả lời hoàn hảo cho vấn đề của bạn sẽ là một trình duyệt web "không đầu" hoàn chỉnh. Đó là thứ kết hợp trình phân tích cú pháp HTML, trình thông dịch javascript và mô hình mô phỏng DOM trình duyệt, tất cả đều hoạt động cùng nhau. Về cơ bản, đó là một trình duyệt web, ngoại trừ không có phần hiển thị của nó. Tại thời điểm này không có một thứ như vậy hoạt động hoàn toàn trong môi trường .NET.

Đặt cược tốt nhất của bạn là sử dụng điều khiển WebBrowser và thực sự tải và chạy trang trong Internet Explorer dưới sự kiểm soát có lập trình. Điều này sẽ không nhanh hay đẹp, nhưng nó sẽ làm những gì bạn cần làm.

Cũng thấy câu trả lời của tôi cho một câu hỏi tương tự: Load a DOM and Execute javascript, server side, with .Net thảo luận về công nghệ có sẵn trong .NET để thực hiện việc này. Hầu hết các phần tồn tại ngay bây giờ nhưng không hoàn toàn chưa có hoặc chưa được tích hợp đúng cách, thật không may.

+0

Sự cố rò rỉ bộ nhớ GDI +/bộ nhớ do kiểm soát WebBrowser gây ra là điều khiến tôi tìm kiếm giải pháp thay thế. Tôi xin lỗi vì không có giải pháp phù hợp cho vấn đề này. – Aabela

+0

Rất tiếc. Vâng đây là một trong những nơi mà không phải là khá có được nêu ra, ít nhất là nếu bạn giữ nó tất cả trong NET. Nếu bạn có thể sống với một ứng dụng lai, chắc chắn có những cách để làm điều này, nhưng nó sẽ phức tạp hơn. Tôi tiếp tục hy vọng một người nào đó sẽ làm công việc để tạo ra tại trình duyệt không đầu thống nhất thực sự hoàn toàn trong .NET. Nhưng nó chắc chắn không có nhiệm vụ nhỏ. Giống như tôi đã nói rất nhiều các mảnh ở đó nhưng ai đó cần phải đặt chúng lại với nhau. –

3

Bạn có thể sử dụng Awesomium cho điều này, http://www.awesomium.com/. Nó hoạt động khá tốt nhưng không hỗ trợ cho x64 và không phải là luồng an toàn. Tôi đang sử dụng nó để quét một số trang web 24x7 và nó chạy tốt trong ít nhất một vài ngày liên tiếp nhưng sau đó nó thường bị treo.

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