使用selenium自动登录淘宝并获取cookie

最近做个东西需要用程序登录淘宝然后去后台获取些东西, 分析了一下登录页面,发现淘宝有用flash生成一个字符串来限制了我们这种不经过浏览器而直接使用程序登录的做法,那 怎么办呢,我想到曾经看到云姐在公司演示过一个用python来作UI自动化测试的工具,应该也有java接口。去找了一个,果然找到了,它就是 Selenium,非常强大,超乎想象!
Selenium可支持编程式的操作浏览器,包括获取页面内容,操作元素,cookie等,通常会使用它提供的浏览器插件来录制UI自动化测试脚本,然后跑自动化脚本,以检测我们的系统功能是否有问题,这样可省去好多人力,而且程序来做,还不容易出错。而我所要做的,只是利用它帮我登录淘宝,获取cookie就可以了,并且我的程序可以通过它获取到登录成功后的浏览器cookie,因为现在大家的session都是用cookie实现的么。
Selenium支持各种主流浏览器,IE,FF,Chrome,Opera等,它也支持在android, ios上的浏览器测试,也支持在A机器上用程序调用B机器上的浏览器等,当然这些不是我关注的重点了。

首先我使用的是Firefox,java,按照网上的资料,进行以下操作:
1,安装Selenium IDE,即浏览器插件
http://docs.seleniumhq.org/download/#side_plugins 页面上找到对应的插件地址,下载安装,
FF的地址是:http://release.seleniumhq.org/selenium-ide/2.4.0/selenium-ide-2.4.0.xpi
2,下载Selenium Server (formerly the Selenium RC Server),它是一个java写的服务器,在我们使用客户端代码 调用selenium时,需要调用到这个服务器,下载下来是个jar包:selenium-server-standalone-2.37.0.jar
在DOS命令行下启动它:java -jar selenium-server-standalone-2.37.0.jar
3,编写代码,你可以使用很多种语言调用它的接口:java,python,c#,ruby,javascript等
我使用java,得先下载客户端接口包:http://selenium.googlecode.com/files/selenium-java-2.37.0.zip

 //以下方法获取登录淘宝成功后的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; }

运行,上面的代码一运行,你就会神奇的发现,你的FF自动打开了并自动转向了http://www.alimama.com/member/login.htm页面,而且页面一加载完成,就自动输入了用户名,密码,并点击了登录按钮,最后登录成功,整个过程就好像是有人在手工操作一样,而其实是程序操作的。使用selenium自动登录淘宝并获取cookie - sun - 学无止境
就这样,我拿到了淘宝登录成功后的cookie,现在我想用程序访问什么资源都可以了!使用selenium自动登录淘宝并获取cookie - sun - 学无止境

又过了段时间,我觉得FF反应太慢,Chrome反应还挺快的,我切换到了Chrome中,也是按上面一样来操作:
1,安装Selenium IDE
http://chromedriver.storage.googleapis.com/2.4/chromedriver_win32.zip,这里面只有一个chromedriver.exe,将其放入操作系统中的PATH环境变量里面的任意一个目录里面
https://github.com/kyo-ago/selenium-ide-for-chrome下载下来,然后在chrome的工具->扩展程序->加载正在开发的扩展程序,安装到chrome中
2,启动selenium-server:java -jar selenium-server-standalone-2.37.0.jar
3,编码python代码,我又换成python了,感觉其简单,开发快速啊:
先用pip安装selenium:pip install selenium
再写python代码:

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值