亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Selenium自動登錄淘寶的登錄漏洞分析

發布時間:2021-12-09 09:14:30 來源:億速云 閱讀:136 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關如何進行Selenium自動登錄淘寶的登錄漏洞分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。


 

一、前言

之前手動登錄淘寶使瀏覽器保存我的信息,然后使用本地用戶配置控制瀏覽器,投機取巧地解決了登錄問題。

雖然這不失為一種方法,但這卻讓selenium的全自動變成了半自動,不配Python之美。

那么如何全自動登錄淘寶呢?起初我是在互聯網上找一些資源項目,直接拿來分析,但隨著淘寶的反爬機制的增強,他們的這些方法都行不通了。于是我決定,自己動手!

 

二、分析

為了方便使用,我將整個代碼進行了封裝,文件名為login,類名為Login,請大家接著往下看。

 
1)相關依賴
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
   
2)構造函數
def __init__(self, username, password):
     """
     初始化瀏覽器配置和登錄信息
     """
     self.url = 'https://login.taobao.com/member/login.jhtml'
     # 初始化瀏覽器選項
     options = webdriver.ChromeOptions()
     # 禁止加載圖片
     options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
     # 設置為開發者模式
     options.add_experimental_option('excludeSwitches', ['enable-automation'])
     # 加載瀏覽器選項
     self.browser = webdriver.Chrome(options=options)
     # 設置顯式等待時間40s
     self.wait = WebDriverWait(self.browser, 40)
     self.username = username  # 用戶名
     self.password = password  # 密碼
   
3)原始登錄,使用淘寶賬號或手機號登錄
def original(self):
    """
    直接使用淘寶賬號登錄

    :return: None
    """
    self.browser.get(url=self.url)
    try:
        input_username = self.wait.until(EC.presence_of_element_located((
            By.CSS_SELECTOR, 'div.fm-field > div.input-plain-wrap.input-wrap-loginid > input'
        )))
        input_password = self.wait.until(EC.presence_of_element_located((
            By.CSS_SELECTOR, 'div.fm-field > div.input-plain-wrap.input-wrap-password > input'
        )))
        # 等待滑塊按鈕加載
        div = self.wait.until(EC.presence_of_element_located((
            By.ID, 'nc_1__bg'
        )))
        input_username.send_keys(self.username)
        input_password.send_keys(self.password)
        # 休眠2s,等待滑塊按鈕加載
        time.sleep(2)
        # 點擊并按住滑塊
        ActionChains(self.browser).click_and_hold(div).perform()
        # 移動滑塊
        ActionChains(self.browser).move_by_offset(xoffset=300, yoffset=0).perform()
        # 等待驗證通過
        self.wait.until(EC.text_to_be_present_in_element((
            By.CSS_SELECTOR, 'div#nc_1__scale_text > span.nc-lang-cnt > b'), '驗證通過'
        ))
        # 登錄
        input_password.send_keys(Keys.ENTER)
        print('Successful !')
    except TimeoutException as e:
        print('Error:', e.args)
        self.original()
 

其它的結點元素的定位我就不多說了,主要說一下滑塊的定位

如何進行Selenium自動登錄淘寶的登錄漏洞分析  

利用瀏覽器定位的話,會定位到 span這個結點,但經過我模仿單擊按住,拖拽后滑塊一動不動,參數也沒有任何改變。于是我嘗試了一下它的父節點div還是按住后拖拽,這次成功了。所以有時候不要懷疑自己的代碼,有可能是其它方面的問題。

還有關于拖拽還要說明一下,淘寶的登錄驗證不是極驗驗證碼,不是拖動滑塊拼圖的操作,而是將滑塊拖到最右端。所以,至于這個最右端,只要距離夠長,且不超出界面范圍,長度隨便定!

最后補充一下,偶爾會出現這種情況。

如何進行Selenium自動登錄淘寶的登錄漏洞分析  

得到這張圖也是很不容易啊,因為這種情況真的是太少了。經過反復實驗,大概是因為滑動的軌跡不是基本水平導致的,就是說朝著斜下方滑動,雖然也能到達最右端,但會給出這個錯誤。我的程序是讓它水平方向滑動300,豎直方向坐標為0。雖然是水平滑動,但是為了提高程序的容錯率,還是加上了一個驗證通過的等待

 
4)使用新浪微博賬號登錄,巧妙利用漏洞

提示:在用新浪微博登錄之前,請在淘寶上綁定你的新浪賬號。

def sina(self):
    """
    使用新浪微博賬號登錄(提前綁定新浪賬號)

    :return: None
    """
    self.browser.get(url=self.url)
    try:
        # 等待新浪登錄鏈接加載
        weibo_login = self.wait.until(EC.element_to_be_clickable((
            By.CSS_SELECTOR, '#login-form a.weibo-login'
        )))
        weibo_login.click()
        input_username = self.wait.until(EC.presence_of_element_located((
            By.CSS_SELECTOR, 'div.info_list > div.inp.username > input.W_input'
        )))
        input_password = self.wait.until(EC.presence_of_element_located((
            By.CSS_SELECTOR, 'div.info_list > div.inp.password > input.W_input'
        )))
        input_username.send_keys(self.username)
        input_password.send_keys(self.password)
        input_password.send_keys(Keys.ENTER)
        # 等待瀏覽器保存我方信息,網速不好可以設置長一點
        time.sleep(5)
        # 刷新頁面
        self.browser.refresh()
        # 等待快速登錄按鈕加載
        quick_login = self.wait.until(EC.element_to_be_clickable((
            By.CSS_SELECTOR, 'div.info_list > div.btn_tip > a.W_btn_g'
        )))
        quick_login.click()
        print('login successful !')
    except TimeoutException as e:
        print('Error:', e.args)
        self.sina()
 

關于結點元素的定位我就不多說了,主要說一下這個漏洞

正常情況下,輸入完信息后點擊登錄,就該進入淘寶頁面了,但是這個登錄按鈕不管怎么點,頁面都是無動于衷。

定位一下,可以發現:

如何進行Selenium自動登錄淘寶的登錄漏洞分析  

這個按鈕的鏈接是javascript:void(0),假鏈接!!!

由于我的前端基礎不好,不知道這啥意思。我瘋狂的在互聯網上查找如何使用selenium點擊這種鏈接,可依舊沒找到解決的辦法。有沒有人知道如何處理這種,請給原文作者留言!

然而就在我快放棄的時候,按了下F5刷新,奇跡出現了

如何進行Selenium自動登錄淘寶的登錄漏洞分析  

檢測到已登錄的微博賬號,快速登錄???原來雖然我沒有進入淘寶,但是瀏覽器左下角一直在顯示如:等待**相應,正在解析主機等信息。所以淘寶還是保存了我的賬號信息,只要下次自動登錄的勾打上(默認打勾),它就會保存賬號信息。

這就是為什么上面的代碼,在輸入好信息并回車登錄后,要等待5秒,就是讓它保存我的賬號信息。

最后刷新頁面,點擊快速登錄,大功告成

 

三、完整代碼及使用方法

 
1)完整代碼
# -*- coding: utf-8 -*-
"""
@author:Pineapple

@contact:cppjavapython@foxmail.com

@time:2020/7/28 9:09

@file:login.py

@desc: login taobao .
"""

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
import time


class Login:
    def __init__(self, username, password):
        """
        初始化瀏覽器配置和登錄信息
        """
        self.url = 'https://login.taobao.com/member/login.jhtml'
        # 初始化瀏覽器選項
        options = webdriver.ChromeOptions()
        # 禁止加載圖片
        options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
        # 設置為開發者模式
        options.add_experimental_option('excludeSwitches', ['enable-automation'])
        # 加載瀏覽器選項
        self.browser = webdriver.Chrome(options=options)
        # 設置顯式等待時間40s
        self.wait = WebDriverWait(self.browser, 40)
        self.username = username  # 用戶名
        self.password = password  # 密碼

    def original(self):
        """
        直接使用淘寶賬號登錄

        :return: None
        """
        self.browser.get(url=self.url)
        try:
            input_username = self.wait.until(EC.presence_of_element_located((
                By.CSS_SELECTOR, 'div.fm-field > div.input-plain-wrap.input-wrap-loginid > input'
            )))
            input_password = self.wait.until(EC.presence_of_element_located((
                By.CSS_SELECTOR, 'div.fm-field > div.input-plain-wrap.input-wrap-password > input'
            )))
            # 等待滑塊按鈕加載
            div = self.wait.until(EC.presence_of_element_located((
                By.ID, 'nc_1__bg'
            )))
            input_username.send_keys(self.username)
            input_password.send_keys(self.password)
            # 休眠2s,等待滑塊按鈕加載
            time.sleep(2)
            # 點擊并按住滑塊
            ActionChains(self.browser).click_and_hold(div).perform()
            # 移動滑塊
            ActionChains(self.browser).move_by_offset(xoffset=300, yoffset=0).perform()
            # 等待驗證通過
            self.wait.until(EC.text_to_be_present_in_element((
                By.CSS_SELECTOR, 'div#nc_1__scale_text > span.nc-lang-cnt > b'), '驗證通過'
            ))
            # 登錄
            input_password.send_keys(Keys.ENTER)
            print('Successful !')
        except TimeoutException as e:
            print('Error:', e.args)
            self.original()

    def sina(self):
        """
        使用新浪微博賬號登錄(提前綁定新浪賬號)

        :return: None
        """
        self.browser.get(url=self.url)
        try:
            # 等待新浪登錄鏈接加載
            weibo_login = self.wait.until(EC.element_to_be_clickable((
                By.CSS_SELECTOR, '#login-form a.weibo-login'
            )))
            weibo_login.click()
            input_username = self.wait.until(EC.presence_of_element_located((
                By.CSS_SELECTOR, 'div.info_list > div.inp.username > input.W_input'
            )))
            input_password = self.wait.until(EC.presence_of_element_located((
                By.CSS_SELECTOR, 'div.info_list > div.inp.password > input.W_input'
            )))
            input_username.send_keys(self.username)
            input_password.send_keys(self.password)
            input_password.send_keys(Keys.ENTER)
            # 等待瀏覽器保存我方信息,網速不好可以設置長一點
            time.sleep(5)
            # 刷新頁面
            self.browser.refresh()
            # 等待快速登錄按鈕加載
            quick_login = self.wait.until(EC.element_to_be_clickable((
                By.CSS_SELECTOR, 'div.info_list > div.btn_tip > a.W_btn_g'
            )))
            quick_login.click()
            print('login successful !')
        except TimeoutException as e:
            print('Error:', e.args)
            self.sina()
   
2)使用

在使用的時候要導入這個Login類,然后初始化這個類,最后登錄方法使用相應的函數,文件名為login,類名為Login。

from login import Login

username = '******'  # 賬號
password = '******.'  # 密碼
# 初始化Login類
login = Login(username, password)
# 使用淘寶賬號或手機號登錄
login.original()
# 使用新浪微博賬號登錄
# login.sina()
   

上述就是小編為大家分享的如何進行Selenium自動登錄淘寶的登錄漏洞分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北碚区| 石城县| 洱源县| 卢氏县| 长垣县| 霍州市| 时尚| 雷州市| 明水县| 彩票| 古丈县| 三门县| 泸水县| 遵义市| 乌拉特中旗| 大渡口区| 辽阳县| 遂宁市| 泾川县| 新津县| 云林县| 和顺县| 汪清县| 衡山县| 柯坪县| 营山县| 仁怀市| 株洲县| 临高县| 巴楚县| 都江堰市| 大宁县| 韩城市| 秭归县| 墨竹工卡县| 阿克苏市| 万宁市| 丰台区| 钟山县| 无为县| 江津市|