工作隨筆——selenium支持post請求,支持自定義header


2018-01-10:fix post 請求數據遺漏部分內容

背景:

  最近在寫一個小程序,發現博主所在的地區訪問該網站時有防ddos功能驗證導致程序不能正常工作。

  經過試驗發現可以用國外代理ip解決這個問題,但是程序走代理訪問延遲高且不穩定。

思路:

  selenium啟動瀏覽器 => 手動通過網站ddos驗證 => 程序操控其他業務請求

問題:

  1.selenium 不支持 post 請求方式

  2.selenium 不支持自定義 request header

環境:

  selenium:3.8.1

  JDK:1.8

  firefox:45.9.0esr     下載歷史版本:https://download-installer.cdn.mozilla.net/pub/firefox/releases/

解決方案:

  1.寫一個本地頁面,post請求通過本地頁面的ajax請求轉發出去,ajax也支持自定義request header 

    問題:本地頁面轉發會在request header附帶上origin。網站對origin有校驗,導致訪問失敗

  2.selenium 執行 js代碼

    問題:只能執行原生js代碼

    參考代碼:https://stackoverflow.com/questions/11430773/how-to-use-javascript-with-selenium-webdriver-java

    WebDriver driver = new FirefoxDriver();   

        // 打開這個網站,防止js跨域請求(用baidu舉例)
        driver.get("https://www.baidu.com");        

        // 開啟開發者模式,方便觀察請求
        Actions builder = new Actions(driver);
        builder.sendKeys(Keys.F12).perform();

        JavascriptExecutor jse = (JavascriptExecutor) driver ;

        try {

             String resp = (String) jse.executeScript(
                        "var xmlhttp=new XMLHttpRequest();\n" +
                        "xmlhttp.open(\"GET\",\"https://www.baidu.com\",false);\n" +
               "xmlHttp.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");\n" +  // 表單提交的頭部信息
                        "xmlhttp.setRequestHeader(\"testHeader\",\"123456\");\n" +  // 自定義請求頭
                        "xmlhttp.send(\"name=test&sex=1&age=18\");\n" +   // 表單數據
                        "return xmlhttp.responseText;");

           System.out.println(resp);

        } catch (Exception e) {
            //.......... Exception 
        }

 

 

 

 

以上,拋磚引玉。如有更好的解決方案,請留言討論,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM