http://sunjun041640.blog.163.com/blog/static/256268322013101473549333/
最近做个东西需要用程序登录淘宝然后去后台获取些东西,分析了一下登录页面,发现淘宝有用flash生成一个字符串来限制了我们这种不经过浏览器而直接使用程序登录的做法,那怎么办呢,我想到曾经看到云姐在公司演示过一个用python来作UI自动化测试的工具,应该也有java接口。去找了一个,果然找到了,它就是Selenium,非常强大,超乎想象!
运行,上面的代码一运行,你就会神奇的发现,你的FF自动打开了并自动转向了http://www.alimama.com/member/login.htm页面,而且页面一加载完成,就自动输入了用户名,密码,并点击了登录按钮,最后登录成功,整个过程就好像是有人在手工操作一样,而其实是程序操作的。//以下方法获取登录淘宝成功后的cookie
public static String click(String username, String password) { WebDriver webDriver = new FirefoxDriver(); webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); webDriver.get("http://login.1688.com/member/signin.htm");
//因为淘宝的登录其实是嵌入在一个iframe里面的,所以得先切换到iframe中再操作 webDriver.switchTo().frame(0);
//输入用户名 webDriver.findElement(By.id("TPL_username_1")).clear(); webDriver.findElement(By.id("TPL_username_1")).sendKeys(username);
//输入密码 webDriver.findElement(By.id("TPL_password_1")).clear(); webDriver.findElement(By.id("TPL_password_1")).sendKeys(password);
//点击登录按钮 webDriver.findElement(By.id("J_SubmitStatic")).click(); webDriver.switchTo().defaultContent(); try {
//不停的检测,一旦当前页面URL不是登录页面URL,就说明浏览器已经进行了跳转 while (true) { Thread.sleep(500L); if (!webDriver.getCurrentUrl().startsWith("http://login.1688.com/member/signin.htm")) { break; } } } catch (InterruptedException e) { e.printStackTrace(); }
//获取cookie,上面一跳出循环我认为就登录成功了,当然上面的判断不太严格,可以再进行修改 Set<Cookie> cookies = webDriver.manage().getCookies(); String cookieStr = ""; for (Cookie cookie : cookies) { cookieStr += cookie.getName() + "=" + cookie.getValue() + "; "; }
//退出,关闭浏览器 webDriver.quit(); return cookieStr; }
def get_cookie(username, password):
browser = webdriver.Chrome() url = "https://login.taobao.com/member/login.jhtml" browser.get(url)
//转到iframe里面去 browser.switch_to_frame(browser.find_element_by_name("taobaoLoginIfr"))
//输入用户名 browser.find_element_by_id("TPL_username_1").clear() browser.find_element_by_id("TPL_username_1").send_keys(username)
//输入密码 browser.find_element_by_id("TPL_password_1").clear() browser.find_element_by_id("TPL_password_1").send_keys(password)
//点击登录按钮 browser.find_element_by_id("J_SubmitStatic").click(); browser.switch_to_default_content()
//检测URL是否已经变化,变化我就认为登录成功,简单点嘛 while True: if browser.current_url != url: break; time.sleep(1)
//cookie取到了 cookie = "; ".join([item["name"] + "=" + item["value"] for item in browser.get_cookies()]) //关闭浏览器
browser.quit()
return cookie