1. 程式人生 > >爬蟲實戰【10】利用Selenium自動登陸京東簽到領金幣

爬蟲實戰【10】利用Selenium自動登陸京東簽到領金幣

oca fire ins close child cond exce markdown common

今天我們來講一下如何通過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()

前面的代碼跟上面是一樣的,只不過要獲取到簽到的標簽。
這種登陸方式基本上可以用於任何網站,只不過做一些修改就可以了。
請大家參考。

技術分享圖片

爬蟲實戰【10】利用Selenium自動登陸京東簽到領金幣