python selenium post请求_工作随笔——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 = newFirefoxDriver();//打開這個網站,防止js跨域請求(用baidu舉例)
driver.get("https://www.baidu.com");//開啟開發者模式,方便觀察請求
Actions builder = newActions(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
}
以上,拋磚引玉。如有更好的解決方案,請留言討論,謝謝!
總結
以上是生活随笔為你收集整理的python selenium post请求_工作随笔——selenium支持post请求,支持自定义header的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子设计大赛作品_第十四届电子设计大赛圆
- 下一篇: Browsersync 运行后 给我这个