Selenium Firefox淘寶自動登入試驗
1.引言
本試驗未達期望.作為經驗備忘記錄.
背景有2個層面的目標:
.利用使用者名稱,密碼資訊登入
.除使用者名稱,密碼外,提供與人工開啟瀏覽器操作相似的環境,如Profile,Cookies資訊,實現登入
前者對環境依賴最小化.
另外期望以headless方式執行,避免GUI系統環境要求。
淘寶登入頁面為:
https://login.taobao.com/member/login.jhtml?style=mini
最後的問題出在滑塊驗證上.
基本認定是對淘寶UA在CAPTCHA人機識別上無法矇混過去。
***目前嘗試使用Selenium自動登入淘寶的努力失敗,已沒有新的思路了.之前網上不少此類資料,看來是成功的,如今的情形如果不是試驗過程有什麼問題,更可能是淘寶UA改變了。
2.環境
系統環境: Windows 8 (x64)
- firefox下載
https://download-ssl.firefox.com.cn/releases-sha2/stub/official/zh-CN/Firefox-latest.exe
版本: 61.0(64位)
預設安裝.
安裝目錄為:%ProgramFiles%\Mozilla Firefox
Profile檔案目錄: $APPDATA%\Mozilla\Firefox
- geckodriver下載
https://github.com/mozilla/geckodriver/releases
版本:0.21.0 (win64)
解壓後把geckodriver.exe複製到Firefox的安裝目錄.
- selenium-java.jar
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
</dependency>
3.頁面操作試驗
以百度搜索為例,試驗Selenium+geckodriver操控頁面的正確性.
模擬以下行為:
.開啟百度頁面
.輸入搜尋關鍵字
.搜尋
程式碼如下:
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
String Url = "https://www.baidu.com";
WebDriver driver =new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(Url);
driver.manage().window().maximize();
WebElement txtbox = driver.findElement(By.name("wd"));
txtbox.sendKeys("HelloWorld");
driver.findElement(By.id("su")).click();
driver.close();
}
執行結果正確.
4.登入試驗
程式碼如下:
public static void main(String[] args) {
String url = "https://login.taobao.com/member/login.jhtml?style=mini";
System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
options.setProfile(new ProfilesIni().getProfile("default"));
FirefoxDriver driver = new FirefoxDriver(options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(url);
driver.manage().window().maximize();
String username = "whereh";
String password = "xxxx";
driver.findElement(By.id("TPL_username_1")).clear();
driver.findElement(By.id("TPL_username_1")).sendKeys(username);
driver.findElement(By.id("TPL_password_1")).clear();
driver.findElement(By.id("TPL_password_1")).sendKeys(password);
driver.findElement(By.id("J_SubmitStatic")).click();
driver.close();
}
public static void main(String[] args) {
String url = "https://login.taobao.com/member/login.jhtml?style=mini";
System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
options.setProfile(new ProfilesIni().getProfile("default"));
FirefoxDriver driver = new FirefoxDriver(options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(url);
driver.manage().window().maximize();
String username = "whereh";
String password = "xxxx";
driver.findElement(By.id("TPL_username_1")).clear();
driver.findElement(By.id("TPL_username_1")).sendKeys(username);
driver.findElement(By.id("TPL_password_1")).clear();
driver.findElement(By.id("TPL_password_1")).sendKeys(password);
driver.findElement(By.id("J_SubmitStatic")).click();
driver.close();
}
在J_SubmitStatic click之前,頁面內容正常(使用者名稱稱,密碼),沒有驗證滑塊.
執行click之後,頁面提示"為了你的賬戶安全,請拖動滑塊完成驗證",滑塊出現.
而且,在這個頁面上手動拖動滑塊,總是出現"哎呀,出錯了,點選重新整理再來一次"的錯誤。
在試驗ChromeDriver過程中,出現的現象一樣,程式控制滑塊也總是在請求服務端analyze時返回錯誤碼300,對應上面的錯誤提示資訊。