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,对应上面的错误提示信息。

猜你喜欢

转载自blog.csdn.net/wherwh/article/details/80877659