我有一個 Selenium Java 庫,其中包含一個 JavaScript“膠水”庫,它使 JavaScript 函式能夠拋出序列化的 Java 例外。這使得在沒有大量樣板的情況下更自然地處理例外條件。
在執行可能想要拋出例外的腳本之前,我將這個庫注入到目標頁面的閉包中,通過executeScript. 回傳時,閉包中定義的函式會保留在頁面上,可供隨后執行的腳本用于引發例外。
此技術在 HtmlUnit、Chrome 和 Edge 上按預期作業。但是,當我在 Firefox 上使用這種技術時,封閉的函式不會持續存在。如果我將閉包粘貼到開發人員工具中的多行編輯器中,功能會保留,但這不是我可以在 Selenium Java 自動化中使用的策略。
是否有其他方法可用于即時向網頁添加功能?是否有可能允許我使用的技術按預期作業的 Firefox 設定?
我現在使用的腳本的來源可以在這里找到:https ://github.com/sbabcoc/Selenium-Foundation/blob/master/src/main/resources/javaGlueLib.js 如評論中所示,結構并且從這里獲得了閉包的“命名空間”功能:https ://github.com/jweir/namespace/blob/master/namespace.js
uj5u.com熱心網友回復:
我找到了我的答案。我一直都知道我最初的實作是在畫線之外,而 Firefox 不會讓我僥幸逃脫。
解決方法是創建一個script元素,將該元素的 [textContent] 設定為我的原始腳本源,并將這個新script節點附加到head我的目標頁面的元素。
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.textContent = arguments[0];
head.appendChild(script);
uj5u.com熱心網友回復:
這可能是 Firefox 本身的限制。但我只是猜測。
您是否嘗試過中間人代理?比如https://mitmproxy.org
您需要處于測驗瀏覽器可以信任 MITM 證書的環境中。然后,您可以配置 MITM 服務器以將您想要的任何內容注入請求中。
MITM 的優點是與瀏覽器無關。
另一種選擇可能是為 Firefox 使用 GreaseMonkey。 https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/472020.html
標籤:javascript 硒网络驱动程序 火狐 壁虎司机
上一篇:如何使用Firefox的遠程除錯協議(RDP)評估JavaScript?
下一篇:PHP腳本僅適用于Chrome
