htmlunit模擬瀏覽器實現163郵箱自動登入
對於表單隱藏在js內,需要解析js並動態載入網頁,找了很多元件,包括httpunit,後來試驗htmlunit通過。感覺httpunit還是比htmlunit差點,所以建議用htmlunit來解析js動態載入的網頁並自動提交表單。對於模擬瀏覽器的htmlunit元件還是有很多需要挖掘,這樣才能試驗不同網站的通用性解析。
重點是:Htmlunit版本會爆出如sslcontext以及httpclient版本不相容問題,換了3個版本,最後2.18版本可以用。
htmlunit基礎程式碼如下:
package gddx; import java.util.HashMap; import java.util.Map; import java.util.Set; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import com.gargoylesoftware.htmlunit.util.Cookie; public class Email163Login { public static void main(String[] args) { try { //建立一個webclient WebClient webClient = new WebClient(BrowserVersion.CHROME); //引數設定 // 1 啟動JS webClient.getOptions().setJavaScriptEnabled(true); // 2 禁用Css,可避免自動二次請求CSS進行渲染 webClient.getOptions().setCssEnabled(false); //3 啟動客戶端重定向 webClient.getOptions().setRedirectEnabled(true); // 4 執行錯誤時,是否丟擲異常 webClient.getOptions().setThrowExceptionOnScriptError(false); // 5 設定超時 webClient.getOptions().setTimeout(50000); //6 設定忽略證書 //webClient.getOptions().setUseInsecureSSL(true); //7 設定Ajax //webClient.setAjaxController(new NicelyResynchronizingAjaxController()); //8設定cookie webClient.getCookieManager().setCookiesEnabled(true); //獲取頁面 HtmlPage page = webClient.getPage("http://mail.163.com/"); // 根據form的名字獲取頁面表單,也可以通過索引來獲取:page.getForms().get(0) HtmlForm form = page.getFormByName("login163"); HtmlTextInput username = (HtmlTextInput) form.getInputByName("username"); HtmlPasswordInput password = (HtmlPasswordInput) form.getInputByName("password"); username.setValueAttribute("sharpsword"); password.setValueAttribute("xyz"); HtmlButton button =(HtmlButton)page.getHtmlElementById("loginBtn"); HtmlPage retPage = (HtmlPage) button.click(); // 等待JS驅動dom完成獲得還原後的網頁 webClient.waitForBackgroundJavaScript(10000); //輸出網頁內容 System.out.println(retPage.asXml()); //獲取cookie Set<Cookie> cookies = webClient.getCookieManager().getCookies();; Map<String, String> responseCookies = new HashMap<String, String>(); for (Cookie c : cookies) { responseCookies.put(c.getName(), c.getValue()); System.out.print(c.getName()+":"+c.getValue()); } //關閉webclient webClient.close(); }catch (Exception e) {System.err.println( "Exception: " + e ); } } }
相關推薦
htmlunit模擬瀏覽器實現163郵箱自動登入
對於表單隱藏在js內,需要解析js並動態載入網頁,找了很多元件,包括httpunit,後來試驗htmlunit通過。感覺httpunit還是比htmlunit差點,所以建議用htmlunit來解析js動態載入的網頁並自動提交表單。對於模擬瀏覽器的htmlunit元件還是有很
163郵箱自動化登入實現模組化
from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains url = 'http://mail.163.com/'
Python模擬瀏覽器實現網頁訪問
Python 模擬瀏覽器訪問 模擬瀏覽器請求數據: import socket # 創建TCP鏈接 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # DNS 解析和鏈接HTTP服務器 tcp_socket.connect
QQ郵箱自動登入問題--frame巢狀元素定位
今天在自己編寫QQ郵箱自動登入的指令碼時遇到一個問題,看圖說話: 因此,正常來說都會想到要定位到“賬號密碼登入”,於是就定位到原始碼: 定位如下: driver.find_element_by_id('switcher_plogin').click() 返回提示找不到該
利用expect + sftp 實現遠端主機自動登入及下載
利用expect + sftp 實現遠端主機自動登入及下載: (ssh是一樣的) #!/usr/bin/expect -f ## Create by Cyril. ## "Usage:./downFilesFromStation USER PWD RemoteIP SourcePat
應用behave行為驅動框架實現QQ郵箱的登入
為了更好地定位元素,首先要仔細分析某個系統登入時,他的登入頁面到底有幾個iframe元素,當有多個時,切登入框的iframe是獨立的話,需要先把frame切換到登入的iframe上,這樣才能對其上面的元素進行一系列操作!! 如圖所示是QQ郵箱的登入頁面 分析HTML對應的dom樹結構是什麼樣的,是否此
C# 163郵箱自動登陸
文章目錄 引言 163郵箱的不同 解決方案 20181030更新 引言 在C# 學校郵箱自動登陸中我們使用WebBrowser控制元件輕鬆地完成了學校郵箱的登陸,但是如果想用這個辦法來登入163郵箱,會找不到使用者名稱、密碼和登陸
JSP實現網頁的自動登入(session+cookie)實現
1、session的作用 使用者用瀏覽器訪問web伺服器時,會為每個使用者建立一個session(會話),session在使用者關閉瀏覽器之前都是有效的,所以我們可以在session中儲存使用者的一些資訊,以供使用。這裡我們用session儲存使用者的賬號名
使用jquery+jsdom模擬瀏覽器實現自動化測試
測試是需要自動化的,靠人測不僅慢而且不準確。 測試不是為了覆蓋住全部的錯誤,程式不可能通過測試來發現全部的問題,測試只是起到錦上添花的作用,測試只能在一定程度上減少基本錯誤。 selenium的自動化測試方案從使用者的角度測試,node的出現為前端自動化測試提供了新方法。 node中的全域性物件是global
spring boot結合spring security實現註冊後自動登入
spring boot結合spring security實現使用者註冊後自動登入 在開發過程中,有些頁面只有使用者登入之後才能訪問,比如使用者的個人中心,但是按道理使用者註冊之後也應該有許可權進入了個
C#實現遠端桌面自動登入
問題:A電腦登入B電腦 1,設定B電腦允許遠端登入 2,用A手動通過“遠端登入軟體”登入B,生成Default.rdp檔案 3.C#程式設計實現自動登入。 具體操作 1.設定B電腦允許遠端登入 http://jingyan.baidu.com/article/49711c
實現linux的自動登入--命令列模式啟動 .
linux的登入主要是由兩個檔案在控制,/usr/sbin/getty來獲得使用者名稱,並進行檢查使用者名稱是否存在,然後將使用者名稱傳遞給/usr/bin/login來獲取使用者輸入密碼和檢查密碼是否正確. 所以要實現linux的自動登入,就要改動這兩個檔案. 1.getty實現的主要功能是: 1)開
java 程式碼實現163郵箱傳送郵件到QQ郵箱
1.建立一個使用者類,來接收發送郵件的郵箱地址和授權密碼(需要注意的是,這裡的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個專門的授權碼 ,這裡需要開啟相應的傳送郵件的服務,這裡開啟的是pop3/smtp服務)package appsoft.cd.applicat
修改PuTTY實現儲存密碼自動登入
一直鍾情於PuTTY的小巧精悍,是我SSH連線之必選。雖然喜歡這款軟體的小巧,但亦要承受其不方便之苦。最希望PuTTY新增的兩個功能是自動登入和Tab支援。這也是眾多使用者的wishlist,但官方已明確的斷了大家的念想。關於自動登入(auto-login password
OkHttp3.0(結合Retrofit2/Rxjava)利用攔截器實現全域性超時自動登入、新增統一引數
應用場景:1.服務端為了統計各個平臺、版本的使用情況,有時在介面中要求傳遞統一的諸如version(客戶端版本)、os(客戶端平臺android/iOS)、userId等引數,這時如果在介面中一一新增就比較繁瑣了,考慮做全域性處理;另外,一次登入成功後,
【2018.05.07】python3.6+selenium 實現自動登入126/163郵箱,然後傳送郵件
# coding:utf-8 ''' 說明: 這個自動化指令碼要實現的是: 自動登入126/163郵箱, 傳送郵件遇到的問題:什麼時候切控制代碼, 有些總是定位不到的屬性如何定位(css)值得擁有 ''' from selenium import webdriver impor
[Python爬蟲] Selenium實現自動登入163郵箱和Locating Elements介紹
前三篇文章介紹了安裝過程和通過Selenium實現訪問Firefox瀏覽器並自動搜尋"Eastmount"關鍵字及截圖的功能。而這篇文章主要簡單介紹如何實現自動登入163郵箱,同時繼續介紹Selenium+Python官網Locating Elements部
Python Selenium實現自動登入163郵箱
最近看了看Selenium,發現這個玩意是相當好用,於是我想自己寫一個郵箱自動登入的小程式,下面以登入163郵箱為例,一開始遇到了很多問題,在網上看了很多教程,發現也都失效了,經過一下午的摸索,終於找到了原因——在Web應用中經常會遇到frame/iframe
[selenium]實現自動登入163郵箱併發送郵件
一、最近在學習selenium,感覺功能蠻好的,先給一張效果圖: 二、程式碼如下: #-*-coding:utf-8-*- from selenium import webdriver fr
python 使用selenium webdriver編寫自動登入126或163郵箱併發送郵件的程式。
這是一個有問題的程式碼,擺弄了很久,找不到解決的辦法,希望看到我錯誤的大神給於留言指點。也可以發郵件給我,郵箱[email protected],大家有高明的解決方案,歡迎大佬指教。謝謝!我的問題主要出在點選“寫信”按鈕無反應。無法準確找到獲取該按鈕,並有反應的方法