zoukankan      html  css  js  c++  java
  • 爬虫实战【10】利用Selenium自动登陆京东签到领金币

    今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币。

    如何自动登陆京东?

    我们先来看一下京东的登陆页面,如下图所示:
    【插入图片,登陆页面】

    登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个、密码的形式登陆,就要切换一下。
    我们看一下这两种登陆方式是如何切换的,通过浏览器的元素检查,我们看一下两个标签。
    【插入图片,两种登陆方式】

    扫码登陆和用户登陆分别在一个div标签里面,我们可以通过css选择器选定用户登陆,使其下面的a标签的class为checked,接下来的一切就比较简单了。
    我们要获取到用户名输入框、密码输入框以及登陆按钮即可。
    【插入图片,用户登陆框】

    下面看一下实现的代码,假设我们通过FireFox浏览器模拟登陆吧。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    import time
    
    login_url='https://passport.jd.com/uc/login'
    uid='********'
    pwd='********'
    
    browser=webdriver.Firefox()
    wait=WebDriverWait(browser, 10)
    
    def login():
        try:
            browser.get(login_url)
            login_tab_u=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.login-tab:nth-child(3)")))
            login_tab_u.click()#这里我们没有获取那个a标签,而是直接获取外层的div标签,比较简单而且方便
            uid_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#loginname")))
            pwd_input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#nloginpwd")))
            login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#loginsubmit")))
            uid_input.send_keys(uid)
            pwd_input.send_keys(pwd)
            login_button.click()
        except TimeoutException:
            login()
    
    def main():
        login()
        time.sleep(5)
        browser.close()
    
    if __name__=='__main__':
        main()
    

    如何自动签到领金币?

    领金币一定要登陆vip页面才可以。
    vip页面的url=’https://vip.jd.com/home.html‘
    但是要登陆vip页面的话,还是会跳转到第一步的那个登陆页面,我们利用第一步的方法登陆即可。
    【插入图片,签到页面】

    签到的链接在右侧,我们获取到这个链接点击就行了。
    【插入图片,签到链接】

    这个标签很简单。

    vip_url='https://vip.jd.com/home.html'
    def user_singin():
        try:
            browser.get(vip_url)
            login_tab_u=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.login-tab:nth-child(3)")))
            login_tab_u.click()
            uid_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#loginname")))
            pwd_input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#nloginpwd")))
            login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#loginsubmit")))
            uid_input.send_keys(uid)
            pwd_input.send_keys(pwd)
            login_button.click()
            sign_in_button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#signIn")))
            sign_in_button.click()
            print('您已签到成功!')
        except TimeoutException:
            user_singin()
    

    前面的代码跟上面是一样的,只不过要获取到签到的标签。
    这种登陆方式基本上可以用于任何网站,只不过做一些修改就可以了。
    请大家参考。

  • 相关阅读:
    Jquery基础知识与使用
    JavaScript人机交互
    CSS和JS基础
    Html基础
    Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写
    MyEclipse中设置类的注释(修改时间,作者等)
    Failed to initialize end point associated with ProtocolHandler ["http-bio-80"] java.net.BindExce问题解决
    Hibernate第四天:Hibernate的查询方式、抓取策略
    Hibernate第三天:Hibernate的一对多配置、Hibernate的多对多的配置
    Neural Network(神经网络)
  • 原文地址:https://www.cnblogs.com/xingzhui/p/7979331.html
Copyright © 2011-2022 走看看