zoukankan      html  css  js  c++  java
  • 工作随笔——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();
    " +
                            "xmlhttp.open("GET","https://www.baidu.com",false);
    " +
                   "xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    " +  // 表单提交的头部信息
                            "xmlhttp.setRequestHeader("testHeader","123456");
    " +  // 自定义请求头
                            "xmlhttp.send("name=test&sex=1&age=18");
    " +   // 表单数据
                            "return xmlhttp.responseText;");
    
               System.out.println(resp);
    
            } catch (Exception e) {
                //.......... Exception 
            }

    以上,抛砖引玉。如有更好的解决方案,请留言讨论,谢谢!

  • 相关阅读:
    macOS 常用配置
    maven 常用配置
    log4j(1.x)最全配置!!!
    Python2 中 input() 和 raw_input() 的区别
    用 Maven 构建 Java-Scala 混合项目
    trim() 的秘密
    【目录】一起来学 Kafka 吧
    Spring in Action.4th
    Hibernate快速入门
    html2canvas 跨域图片无法正常加载问题解决办法
  • 原文地址:https://www.cnblogs.com/zz0412/p/8126703.html
Copyright © 2011-2022 走看看