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