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,对应上面的错误提示信息。
热门工具 换一换