zoukankan      html  css  js  c++  java
  • 京东商城自动签到领京豆

    一.介绍

    PhantomJS是一个基于WebKit的JavaScript API,它使用QtWebKit作为它核心浏览器的功能,使用WebKit来编译解释执行JavaScript代码,任何你可以在基于WebKit浏览器做的事情,它都能做到。Selenium是一个用于Web应用自动化程序测试的工具,可以让浏览器自动加载页面,获取需要的数据,Selenium自己不带浏览器,所以需要和PhantomJS、FireFox、Chrome等浏览器结合

    二.登录流程

    1.切换登录方式

    查找claaa=div.login-tab.login-tab-r的元素,发送click事件,class标签在selenium中需要使用"元素类型.class1.class2"把空格进行替换。

    2.输入用户名密码并登录

    查找id=loginname的元素,调用send_keys输入用户名;查找id=nloginpwd的元素,调用send_keys输入密码;查找id=loginsubmit的元素,发送click事件。

    3.用户签到

    打开http://vip.jd.com/home.html页面,查找id=signIn的元素,发送click事件。

    4.店内签到

    打开https://bean.jd.com/myJingBean/list页面,使用xpath查找//ul[@class='bean-shop-list']/li/a[@class='s-btn']元素,查找href属性,并打开页面;在新打开的页面中查找class=a.d-header-icon.unsigned的元素,并发送click事件。

    三.完整代码

    新建jd.py文件

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    import time
    import sys
    import io
    
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    
    # 点击页面元素
    def my_click(browser, type, value):
        if type == "id":
            element = browser.find_element_by_id(value)
        elif type == "name":
            element = browser.find_element_by_name(value)
        elif type == "class":
            element = browser.find_element_by_css_selector(value)
        else:
            print("Can't find element")
            return
        element.click()
        time.sleep(3)
    
    # 用户签到
    def my_login(browser):
        browser.get("https://passport.jd.com/uc/login")
        time.sleep(3)
        my_click(browser, "class", "div.login-tab.login-tab-r")
    
        loginname = browser.find_element_by_id("loginname")
        nloginpwd = browser.find_element_by_id("nloginpwd")
        loginname.send_keys("username")
        nloginpwd.send_keys("password")
    
        my_click(browser, "id", "loginsubmit")
        print("login success")
        time.sleep(3)
    
        # 把页面保存为图片,验证是否登录成功
        browser.get_screenshot_as_file("login.png")
    
    # 店内签到
    def shop_sign_in(browser):
        print("店内签到")
        browser.get("https://bean.jd.com/myJingBean/list")
        time.sleep(3)
        shops = browser.find_elements_by_xpath("//ul[@class='bean-shop-list']/li/a[@class='s-btn']")
        urls = [s.get_attribute("href") for s in shops]
        for url in urls:
            try:
                browser.get(url)
                time.sleep(3)
                my_click(browser, "class", "a.d-header-icon.unsigned")
                print("%s 签到成功" % url)
            except:
                print("%s 签到失败" % url)
    
    # 用户登录
    def user_sign_in(driver):
        print("用户签到")
        url = "http://vip.jd.com/home.html"
        driver.get(url)
        time.sleep(3)
        my_click(driver, "id", "signIn")
        print("%s 签到成功" % url)
    
    def main():
        browser = webdriver.PhantomJS(executable_path=r"/root/phantomjs-2.1.1-linux-x86_64/bin/phantomjs")
        # 最大化浏览器窗口
        browser.maximize_window()
    
        my_login(browser)
        user_sign_in(browser)
        shop_sign_in(browser)
    
        browser.quit()
    
    if __name__ == "__main__":
        main()

    四.验证程序

    环境:Python(3.5.2)

    1.下载Phantomjs

    地址http://phantomjs.org/download.html

    2.运行脚本

    root@710bd3e4deb6:~# python3 jd.py 

    3.登录https://bean.jd.com/myJingBean/list查看是否签到成功

    五.异常处理

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

    输出字符编码格式错误,修改编码格式

    import sys
    import io
    
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  • 相关阅读:
    ABAP接口用法
    监听textarea数值变化
    The first step in solving any problem is recognizing there is one.
    Wrinkles should merely indicate where smiles have been.
    God made relatives.Thank God we can choose our friends.
    Home is where your heart is
    ABAP跳转屏幕
    Python 工具包 werkzeug 初探
    atom通过remote ftp同步本地文件到远程主机的方法
    Mongodb学习笔记一
  • 原文地址:https://www.cnblogs.com/faramita2016/p/7782659.html
Copyright © 2011-2022 走看看