亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Java Selenium 執行 JavaScript 庫和函數

從 Java Selenium 執行 JavaScript 庫和函數

30秒到達戰場 2021-09-04 17:25:16
我在 Eclipse 中,編寫 Java GUI/腳本,運行無頭 chromedriver,我在嘗試在驅動程序中加載 html2canvas.js [1] [2]庫時遇到問題,然后調用我在其上編寫的函數瀏覽器中的庫;我收到此代碼的未定義錯誤:String ss1ScriptLoc = "C:\\Users\\me\\Desktop\\resources\\html2canvas.min.js";String ss2ScriptLoc = "C:\\Users\\me\\Desktop\\resources\\takeScreenShot.js";je.executeScript(        "var headID1 = document.getElementsByTagName('head')[0]; "        + "var newScript1 = document.createElement('script'); "        + "newScript1.type = 'text/javascript'; "        + "newScript1.src = '" + ss1ScriptLoc + "'; "        + "headID1.appendChild(newScript1); "        + "var headID2 = document.getElementsByTagName('head')[0]; "        + "var newScript2 = document.createElement('script'); "        + "newScript2.type = 'text/javascript'; "        + "newScript2.src = '" + ss2ScriptLoc + "'; "        + "headID2.appendChild(newScript2); "        + "$(document).ready( function () { takeScreenShot(); });"    );這會導致未定義函數“takeScreenShot();”的錯誤 我以為我已經在本地 .js 文件中定義了它。Starting ChromeDriver 75.0.3770.140 (-refs/branch-heads/3770@{#1155}) on port 48415Only local connections are allowed.Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.Aug 05, 2019 9:36:53 AM org.openqa.selenium.remote.ProtocolHandshake createSessionINFO: Detected dialect: W3Cjava.util.concurrent.ExecutionException: org.openqa.selenium.JavascriptException: javascript error: takeScreenShot is not defined  (Session info: headless chrome=75.0.3770.142)Caused by: org.openqa.selenium.JavascriptException: javascript error: takeScreenShot is not defined  (Session info: headless chrome=75.0.3770.142)Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'System info: host: '', ip: '', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191'Driver info: org.openqa.selenium.chrome.ChromeDriver
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

出于安全原因,Chrome 不允許您加載本地資源。您需要將文件放在驅動程序可以訪問的地方(網絡驅動器/服務器/存儲庫等),或者讀取文件并將其作為參數傳遞。


以下是第二個選項的工作原理:不要src在腳本元素上指定


je.executeScript(

    $"var headID1 = document.getElementsByTagName('head')[0]; "

    + "var newScript1 = document.createElement('script'); "

    + "newScript1.type = 'text/javascript'; "

    + "var code = {fileText}; "

    + "newScript1.appendChild(document.createTextNode(code)); "

    + "headID1.appendChild(newScript1); "

    + "takeScreenShot();"

);


查看完整回答
反對 回復 2021-09-04
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

這是我使用 Selenium 執行/注入本地存儲的“.js”文件的方法:


  File newJSFile = new File(path_to_local_js_file);

        if (newJSFile.exists())

        {

            try

            {

                  Scanner sc = new Scanner(new FileInputStream(newJSFile));

        String js_TxtFile = ""; 

            while (sc.hasNext()) {          

                String[] s = sc.next().split("\r\n");   

                for (int i = 0; i < s.length; i++) {

                    js_TxtFile += s[i];

                    js_TxtFile += " ";

                }   


            }

              try

                {

                ((JavascriptExecutor)driver).executeScript(js_TxtFile);

                }

                catch (Exception ex)

                {

                     System.out.println ("Exception when running Javascript: " + ex.toString());

                }


            }

            catch (Exception ex)

            {

            System.out.println(ex.toString());

            }

        }


查看完整回答
反對 回復 2021-09-04
  • 2 回答
  • 0 關注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號