zoukankan      html  css  js  c++  java
  • 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 好慢啊,应该是录制软件的问题。

    四、模拟登录合天智汇(可以赚币啦^_^)

    通过使用选择器选择元素进行模拟输入和点击按钮提交,不用切换frame/iframe了,要简单一点,连form都没有。
    直接上码
    #-*- 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()
    就不录gif了,偷个懒。
     

    THE END

  • 相关阅读:
    nginx增加lua支持
    使用nginx+lua实现web项目的灰度发布
    amoeba学习
    信号有关的内容
    Linux系统的进程相关内容
    等待类型
    孤立用户故障排除
    恢复数据库
    执行计划之Insert,update,delete
    临时表和表变量
  • 原文地址:https://www.cnblogs.com/liuxingbusi/p/9278290.html
Copyright © 2011-2022 走看看