1. 程式人生 > >Selenium Firefox淘寶自動登入試驗

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,對應上面的錯誤提示資訊。