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

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

背景:java

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

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

思路:小程序

  selenium啓動瀏覽器 => 手動經過網站ddos驗證 => 程序操控其餘業務請求跨域

問題:瀏覽器

  1.selenium 不支持 post 請求方式app

  2.selenium 不支持自定義 request headerpost

環境:網站

  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 
        }

 

 

 

 

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

相關文章
相關標籤/搜索