cuốn sách gpt4 ai đã làm

Giải quyết vấn đề ScriptException khi HtmlUnit thực thi JS

In lại Tác giả: Sahara Thời gian cập nhật: 2024-05-08 23:06:01 60 4
mua khóa gpt4 Nike

Mô tả vấn đề

HtmlUnit là trình mô phỏng trình duyệt phiên bản Java HeadLess nhẹ hơn Selenium và không yêu cầu cài đặt và triển khai trình duyệt cũng như chương trình Trình điều khiển của nó trên máy chủ.

Tuy nhiên, như chúng ta đều biết, việc hỗ trợ các tập lệnh JS của HtmlUnit không được thân thiện lắm. Hầu hết các vấn đề trong GitHub đều liên quan đến lỗi thực thi JS.

Trong quá trình sử dụng thực tế (phiên bản HtmlUnit 4.1.0), tác giả cũng gặp phải vấn đề thực thi JS và không tìm thấy giải pháp tốt nào trong vấn đề StackOverflow và google.

Nguyên nhân cụ thể của vấn đề là do trang gốc sử dụng các từ khóa và phương thức như async, wait, sau đó là trong ES6.

org.htmlunit.ScriptException: thiếu ; trước câu lệnh (https://www.xxx.com/includes../../../js/common.js#322) tại org.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction. run(JavaScriptEngine.java:963) tại org.htmlunit.corejs.javascript.Context.call(Context.java:585) tại org.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:481) tại org.htmlunit.javascript.HtmlUnitContextFactory.callSecured(HtmlUnitContextFactory.java:313) tại org.htmlunit.javascript.JavaScriptEngine.compile(JavaScriptEngine.java: 735) tại org.htmlunit.javascript.JavaScriptEngine.compile(JavaScriptEngine.java:110) tại org.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1124) tại org.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1015)

Giải pháp

Tôi bắt đầu suy nghĩ ngược lại. Vì những từ khóa không được hỗ trợ này gây ra lỗi thực thi JS, tôi có thể sửa đổi mã nguồn của trang web và tài nguyên JS để lọc ra những từ khóa không được hỗ trợ khi trang và tài nguyên JS được tải không?

Khi đọc tài liệu trang web chính thức của HtmlUnit, tôi thấy rằng có một giao diện ScriptPreProcessor, có thể sửa đổi mã thực thi của JS thông qua các hook.

this.browser.setScriptPreProcessor((htmlPage, sourceCode, sourceName, lineNumber, htmlElement) -> { // Xử lý HtmlUnit không hỗ trợ từ khóa async và wait của ES6 và xử lý mã nguồn js if (StringUtils.contains(sourceName, "tools.js")) { sourceCode = sourceCode.replace("async", StringUtils.EMPTY); sourceCode = sourceCode.replace("await", StringUtils.EMPTY } return sourceCode });

Bạn có thể xử lý sourceCode tùy theo các vấn đề cụ thể mà bạn gặp phải.

Cuối cùng, nếu một số đối tượng JS không được hỗ trợ, bạn có thể phân tích mã JS của trang gốc, triển khai logic JS thông qua Java, sau đó xử lý nó bằng cách gán giá trị cho các biến và sửa đổi mã nguồn JS.

Cuối cùng, bài viết về cách giải quyết thông báo lỗi ScriptException khi HtmlUnit thực thi JS kết thúc tại đây. Nếu bạn muốn biết thêm về cách giải quyết thông báo lỗi ScriptException khi HtmlUnit thực thi JS, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. hỗ trợ nó trong tương lai blog của tôi! .

60 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress