python + selenium 实现自动登录网站
PS:写了2个小时,忘记保存了,无奈只得重写。心痛!
最近玩合天,必须每天登录才有合氏币拿,每次输入用户名和密码太麻烦了;想破解某同学的QQ相册,必须先达到登录状态才行啊。
环境:win7 64位 + python2.7 + selenium
一、安装selenium
Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏览器,完全模拟用户的操作,比如点击链接、输入表单,点击按钮提交等。所以我们使用它可以很方便的来登录网站和QQ空间。
pip install selenium
二、安装浏览器驱动Chromedriver
一开始测试报错,并且Chrome浏览器提示:请停用以开发者模式运行的扩展程序,网址输入框中只显示:data;
,如下图:
这个问题是由于因为浏览器驱动Chromedriver和Chrome的版本不兼容导致无法通过driver在浏览器输入网址而出现的,解决的办法很简单:查看你Chrome浏览器的版本(帮助 -> 关于Google Chrome(G)),下载对应版本的浏览器驱动就可以了。
下载对应Chromedriver后放到python目录、或者system32下,就可以了。
附表:最新的Chromedriver与Chrome的版本对应关系表:
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.35 | v62-64 |
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
不同版本的Chromedriver都可以通过这里链接下载:
http://chromedriver.storage.googleapis.com/index.html
我下载的是chromedriver win32.zip
三、模拟登录QQ空间
有个关键点得注意,在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用,QQ空间就是这样的,由于WebDriver 只能在一个页面上对元素识别与定位,对于frame/iframe 表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe 表单的内嵌页面中。
不废话,直接上码。
#-*- coding:utf8 -*- # 导入selenium2中的webdriver库 from selenium import webdriver # 实例化出一个Firefox浏览器 driver = webdriver.Chrome() # 设置浏览器窗口的位置和大小 driver.set_window_position(20,40) driver.set_window_size(1100,700) # 打开一个页面(QQ空间登录页) driver.get("http://qzone.qq.com") # 登录表单在页面的框架中中,所以要切换到该框架 driver.switch_to_frame('login_frame') # 通过使用选择器选择到表单元素进行模拟输入和点击按钮提交 driver.find_element_by_id('switcher_plogin').click() driver.find_element_by_id('u').clear() driver.find_element_by_id('u').send_keys('1650277972') driver.find_element_by_id('p').clear() driver.find_element_by_id('p').send_keys('*********')#password driver.find_element_by_id('login_button').click() # do something # 退出窗口 #driver.quit()
录了一个gif,但是这个 gif 好慢啊,应该是录制软件的问题。
四、模拟登录合天智汇(可以赚币啦^_^)
#-*- coding:utf8 -*- # 导入selenium2中的webdriver库 from selenium import webdriver # 实例化出一个Firefox浏览器 driver = webdriver.Chrome() # 设置浏览器窗口的位置和大小 driver.set_window_position(20,40) driver.set_window_size(1100,700) # 打开一个页面(合天登录页) driver.get("http://www.hetianlab.com/loginLab.do") # 通过使用选择器选择元素进行模拟输入和点击按钮提交 driver.find_element_by_id('userEmail').clear() driver.find_element_by_id('userEmail').send_keys('17690764155') driver.find_element_by_id('passwordIn').clear() driver.find_element_by_id('passwordIn').send_keys('**********') driver.find_element_by_id('registButIn').click() # do something # 退出窗口 #driver.quit()
THE END