selenium登陸某寶的滑動怎麼過

selenium登陸淘寶的滑動怎麼過,確實淘寶在滑動這一塊限制了很多條件

沒太多廢話,上效果,在分析過程,上傳code

由於現在大型網站對selenium工具進行檢測,若檢測到selenium,則判定爲機器人,訪問被拒絕。所以第一步是要防止被檢測出爲機器人,如何防止被檢測到呢?當使用selenium進行自動化操作時,在chrome瀏覽器中的consloe中輸入windows.navigator.webdriver會發現結果爲Ture,而正常使用瀏覽器的時候該值爲False。所以我們將windows.navigator.webdriver進行屏蔽。
同時也要構造模擬器更多的參數,有些參數不是爲了僞造,而是爲了便於調試了運行。

# -*- encoding: utf-8 -*-
# auth : 漫天、飛雪
# func : simulation crack taobao slide verification code

import time

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains

user = "******"
password = "******"


class ChromeOption(object):
    def __init__(self):
        options = Options()
        options.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"')
        # options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"')
        # options.add_argument("--disable-javascript")  # 禁止加載js
        # options.add_argument("--window-size=1366,768")  # 設置窗口大小
        options.add_argument("--start-maximized")       # 最大化
        options.add_argument("--incognito")  # 隱身模式,無痕模式
        options.add_argument("--disable-infobars")  # 禁用瀏覽器正在被自動化程序控制的提示
        options.add_argument('lang=zh_CN.UTF-8')
        # options.add_argument('--disable-gpu')  # 禁用 gpu
        options.add_argument('--disable-infobars')  # 除去“正受到自動測試軟件的控制”
        # options.set_headless()  # 無頭瀏覽器
        # options.add_argument('--headless')  # 無頭瀏覽器
        options.add_argument('--no-sandbox')  # 讓 driver 在 root 權限下跑
        # options.add_argument('--disable-dev-shm-usage')
        # options.add_argument('blink-settings=imagesEnabled=false')  # 禁止加載圖片
        options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打開開發者模式
        options.add_argument("--auto-open-devtools-for-tabs")  # 打開 F12

        self.driver = webdriver.Chrome(options=options)

    def __del__(self):
        """ 關閉模擬器 """
        self.driver.close()

    @staticmethod
    def get_track(distance):
        """ 模擬軌跡 假裝是人在操作 """

        """ 1.設定長度比例 """
        pos = [0, 1, 2, 3, 3, 2, 1, 2, 2, 1]  # 滑動軌跡之間比例設定
        pos = [0, 5]  # 滑動軌跡之間比例設定

        """ 2. 正弦函數 """
        # pos = [random.randrange(0, 10) for i in range(10)]
        # pos.sort()
        # pos = [item / 10 * math.pi for item in pos]
        # pos = [math.sin(x) for x in pos]

        pos_sum = sum(pos)
        route = [int(int(distance) * (item / pos_sum)) for item in pos]  # 計算出移動路徑

        route = route + [int(distance) - sum(route), ]

        print('distance', distance)
        print('sum route', sum(route))
        print('route', route)
        return route

    def run(self):
        first_page_url = "https://www.taobao.com/"
        self.driver.get(url=first_page_url)
        login_url = "https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.754894437.1.5af911d9Dscpe3&f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F"
        self.driver.get(url=login_url)
        driver_element_user =self.driver.find_element_by_xpath('//input[@id="fm-login-id"]')
        driver_element_password =self.driver.find_element_by_xpath('//input[@id="fm-login-password"]')
        driver_element_user.send_keys(user)
        driver_element_password.send_keys(password)
        time.sleep(0.5)
        login_button = self.driver.find_element_by_xpath('//*[@id="login-form"]/div[@class="fm-btn"]/button[@type="submit"]')
        login_button.click()  # 登錄,出驗證碼
        time.sleep(1)
        driver_element_slider = self.driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')
        ActionChains(driver=self.driver).click_and_hold(on_element=driver_element_slider).perform()

        track_list = self.get_track(258)
        for track in track_list:
            ActionChains(driver=self.driver).move_by_offset(xoffset=track, yoffset=0).perform()  # 鼠標移動到距離當前位置(x,y)
            # time.sleep(0.002)  # 適當的延時迷惑敵人
        time.sleep(1)
        ActionChains(driver=self.driver).release(on_element=driver_element_slider).release()
        login_button.click()  # 登錄
        time.sleep(1)
        commodity_url = "https://detail.tmall.com/item.htm?id=44081513406&ali_trackid=30_64ee7d9987b80c1ba85ae7f824e5d46c&spm=a21bo.2017.201863-2.1&skuId=78818774201"
        self.driver.get(url=commodity_url)
        driver_element_purchase = self.driver.find_element_by_xpath('//*[@id="J_LinkBuy"]')
        driver_element_purchase.click()
        time.sleep(3)
        driver_element_dingdan = self.driver.find_element_by_xpath('//*[@id="submitOrderPC_1"]/div/a')
        driver_element_dingdan.click()
        time.sleep(10)
        pass


if __name__ == '__main__':
    chrome = ChromeOption()
    chrome.run()


ps : 代理容錯能力很弱,不魯棒,只爲了追求哪個效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章