美文网首页我爱编程
模拟登录之京东网 - selenium

模拟登录之京东网 - selenium

作者: __Cool | 来源:发表于2017-12-31 21:01 被阅读197次

    接上一篇模拟登录之拉勾网。

    拉勾网对表单的密码字段进行了几轮 md5 加密,官网加密的思路比较清楚,顺藤摸瓜,就能找到拉勾网加密的方法,但是像淘宝、京东等大型商业网站,为了账户的安全,加密的逻辑复杂,可能加密规则每天都在改变,一些表单字段是很难成功获取到的,尽管如此,还是有工具能够解决这类网站 —— Selenium

    准备

    Selenium

    Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。

    在终端模仿用户对浏览器的操作,如鼠标点击,鼠标下滑,键盘输入。
    使用 selenium 需要安装/下载:

    1. selenium pip install selenium
    2. 下载浏览器驱动 ChromeDriver

    思路

    1. 分析京东登录页面
    2. Selenium 模拟用户登录
    3. 使用 pickle 保存 cookies
    4. 验证 cookies 是否有效

    分析京东登录页面

    在浏览打开 https://passport.jd.com/new/login.aspx 页面后,界面如:

    loginpage.png

    大概有几种登录方式,二维码和账密登录,首先登录页面展示二维码登录,我们需要点击账户登录才能切换到账密登录,打开调试器查看账户登录的 css 代码:

    css1.png

    定位此元素:div.login-tab-r a

    zhanghu.png

    切换到账户登录后,还需要获取三个 css 控件,经过调试获得的 css 代码:

    邮箱:input#loginname
    密码:input#nloginpwd
    登录按键:a#loginsubmit

    selenium 登录

    import time
    from selenium import webdriver
    import requests
    import pickle
    def jd_login(username, password):
        driver = webdriver.Chrome(executable_path="C:\Users\Stone\PycharmProjects\Virtualenv\scrapy_1\chromedriver.exe") # 浏览器驱动位置
        driver.get('https://passport.jd.com/new/login.aspx')  # JD 登录页面
        time.sleep(2)  # 等待加载
        driver.find_element_by_css_selector('div.login-tab-r a').click()     # 切换登录按钮
        driver.find_element_by_css_selector('input#loginname').send_keys(username)   # 填写账号
        driver.find_element_by_css_selector('input#nloginpwd').send_keys(password)      # 填写密码
        driver.find_element_by_css_selector('a#loginsubmit').click()              # 点击登录按钮
        driver.delete_all_cookies()  
        jd_cookies = driver.get_cookies() 
        driver.close()  # 关闭浏览器
        pickle.dump(jd_cookies, open('cookies.pkl', 'wb'))  # 保存cookies
        print 'cookies save successfully!'
    

    整段代码做了如下事情:

    1. 找到浏览器驱动位置
    2. 请求京东登录界面
    3. 切换登录按钮
    4. 填写账号和密码
    5. 点击登录,保存 cookies

    如果 css 代码正确,这一步 over

    测试 cookies 有效性

    经过 selenium 登录得到的 cookies 保存在同目录的 cookies.pkl 文件中,加载此文件,将获取到的 cookies 去访问京东需要登录的界面,如:http://helper.jd.com/IDPlus/pchtml/size-center.html

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.3397.16 Safari/537.36',
    }
    def is_login():
        try:
            cookies = pickle.load(open('cookies.pkl', 'rb'))  # 加载cookies,传给requests
            print 'cookies loaded successfully '
        except:
            print 'cookies failed to load!'
        session = requests.session()
        for cookie in cookies:
            session.cookies.set(cookie['name'], cookie['value'])
        response = session.get('http://helper.jd.com/IDPlus/pchtml/size-center.html', headers=headers,
                               allow_redirects=False)
        with open("jd.html",'w') as f:
            f.write(response.text.encode("utf-8"))
            f.close()
        print response.text
    

    此段代码做了如下事情:

    1. cookies 一个个加入 session
    2. session 请求权限页面
    3. allow_redirects 如果返回的状态码不是 200,那么就重定向,此参数看情况添加
    4. response.text 写到本地,再次确认 cookies 是否有效

    参考资料:

    Selenium:http://www.seleniumhq.org/
    Github 上 Selenium 项目:https://github.com/search?l=Python&q=selenium&type=Repositories&utf8=%E2%9C%93

    相关文章

      网友评论

        本文标题:模拟登录之京东网 - selenium

        本文链接:https://www.haomeiwen.com/subject/lsgagxtx.html