工作随笔——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
}

以上,抛砖引玉。如有更好的解决方案,请留言讨论,谢谢!
工作随笔——selenium支持post请求,支持自定义header的更多相关文章
- 原创:【ajax | axios跨域简单请求+复杂请求】自定义header头Token请求Laravel5后台【亲测可用】
如标题:我想在ajax的header头增加自定义Token进行跨域api认证并调用,api使用laravel5编写,如何实现? 首先,了解下CORS简单请求和复杂请求. -- CORS简单请求 -- ...
- jquery + node 通过 CORS 实现跨域访问,支持cookie和自定义header
跨域有多种方式,现在的情况看来还是CORS更适合一些,有很多优点,比如浏览器正式支持.支持post.可以控制跨域访问的网站等. 我们来看看node如何实现cors方式的跨域.在网上找到了一些代码,考过 ...
- Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...
- React Native之(支持iOS与Android)自定义单选按钮(RadioGroup,RadioButton)
React Native之(支持iOS与Android)自定义单选按钮(RadioGroup,RadioButton) 一,需求与简单介绍 在开发项目时发现RN没有给提供RadioButton和Rad ...
- 让WebService支持Get请求
在C#中,新建一个webservice,默认是post类型的.如果需要支持Get请求,需要对web.config文件进行配置 <system.web> <compilation de ...
- dropwizard使用cors支持跨域浏览器取不到自定义header问题
dropwizard支持cors的配置如下: public void run(Configuration conf, Environment environment) { // Enable CORS ...
- 测试平台系列(92) 让http请求支持文件上传
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...
- 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互
[源码下载] 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互 作者: ...
- 开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等
开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等 C++开发网络通信程序时用asio是个不错的选择 ...
随机推荐
- 前端框架:react还是vue?
之前写了一篇前端框架的大汇总,主要介绍了当下主流的框架和其特性.最近除了bootstrap,就属react和vue最为热门,这篇就主要拿这两个框架来做一下详细对比. 究竟如何正确使用?作为小白的我们从 ...
- Thrift全面介绍
官网:http://thrift.apache.org 简介 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java ...
- linux操作系统基础篇(八)
shell脚本的变量以及正则表达式 一.变量 含义:程序的运行就是一些列状态的变量->用变量值的变化去表示. 命名规则 以字母或下划线开头,剩下的部分可以是:字母.数字.下划线. 最好遵循下述规 ...
- SpringBoot错误求解决
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | ...
- python利用scrapy框架爬取起点
先上自己做完之后回顾细节和思路的东西,之后代码一起上. 1.Mongodb 建立一个叫QiDian的库,然后建立了一个叫Novelclass(小说类别表)Novelclass(可以把一级类别二级类别都 ...
- spring cloud feign不支持@RequestBody+ RequestMethod.GET,报错
1.问题梳理: 异常:org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not ...
- ideal中如何添加几个不同的项目在同一个idea页面显示(同一个窗口显示多个工程)
今天,我遇到了一个问题,就是同事给了我一些项目,我下载了之后,项目有点多,然后想把这些项目都放到一个里面,所以我就采取了添加module的方式进行添加,首先先看一下我们的四个项目, 我们就想实现在一个 ...
- DIV+CSS特殊符号的处理方法
: :; ;< <= => >? ?@ @^ ^_ _` `{ {| |} }~ ~--- ...
- MySQL .msi 安装失败改用.zip安装步骤
一开始官网下载.msi安装包,安装到配置server时无法启动,长时间卡在这里,无法继续下去.上网看了一下解决办法,发现用.zip安装包进行安装比较简单可靠. 一.利用.msi安装包安装失败后的处理 ...
- FFmpeg之AVPacket
花满楼原创 AVPacket,是压缩数据的结构体(解码前或编码后的结构体). 本文介绍FFmepg中常见结构AVPacekt,尽量用具体值来理解. 整个用于调试的代码可以这样写: #include & ...