Goland 发表于 2021-7-20 14:25:21

破解淘宝登录滑块机制

我的思路是使用 pyautogui 完成点击事件

代码附上
from selenium import webdriver
import logging
import time
from selenium.common.exceptions import NoSuchElementException, WebDriverException
from retrying import retry
from selenium.webdriver import ActionChains

import pyautogui

pyautogui.PAUSE = 0.5

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)


class taobao():
    def __init__(self):
      self.browser = webdriver.Chrome("F:\工作\测试\chromedriver.exe")
      # 最大化窗口
      self.browser.maximize_window()
      self.browser.implicitly_wait(5)
      self.domain = 'http://www.taobao.com'
      self.action_chains = ActionChains(self.browser)

    def login(self, username, password):
      while True:
            self.browser.get(self.domain)
            time.sleep(1)

            # 会xpath可以简化这几步
            # self.browser.find_element_by_class_name('h').click()
            # self.browser.find_element_by_id('fm-login-id').send_keys(username)
            # self.browser.find_element_by_id('fm-login-password').send_keys(password)
            self.browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div/div/a').click()
            self.browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(username)
            self.browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password)
            time.sleep(1)

            try:
                # 出现验证码,滑动验证
                slider = self.browser.find_element_by_xpath("//span")

                if slider.is_displayed():
                  # 拖拽滑块
                  self.action_chains.drag_and_drop_by_offset(slider, 258, 0).perform()
                  time.sleep(0.5)
                  # 释放滑块,相当于点击拖拽之后的释放鼠标
                  self.action_chains.release().perform()
            except (NoSuchElementException, WebDriverException):
                logger.info('未出现登录验证码')

            # 会xpath可以简化点击登陆按钮,但都无法登录,需要使用 pyautogui 完成点击事件
            # self.browser.find_element_by_class_name('password-login').click()
            # self.browser.find_element_by_xpath('//*[@id="login-form"]/div/button').click()
            # 图片地址
            coords = pyautogui.locateOnScreen('1.png')
            x, y = pyautogui.center(coords)
            pyautogui.leftClick(x, y)

            nickname = self.get_nickname()
            if nickname:
                logger.info('登录成功,呢称为:' + nickname)
                break
            logger.debug('登录出错,5s后继续登录')
            time.sleep(5)

    def get_nickname(self):
      self.browser.get(self.domain)
      time.sleep(0.5)
      try:
            return self.browser.find_element_by_class_name('site-nav-user').text
      except NoSuchElementException:
            return ''

    def clear_cart(self):
      cart = self.browser.find_element_by_xpath('//*[@id="J_MiniCart"]')
      if cart.is_displayed():
            cart.click()
      select = self.browser.find_element_by_xpath('//*[@id="J_SelectAll1"]/div/label')
      if select.is_displayed():
            select.click()
      time.sleep(0.5)
      go = self.browser.find_element_by_xpath('//*[@id="J_Go"]')
      if go.is_displayed():
            go.click()
      submit = self.browser.find_element_by_xpath('//*[@id="submitOrderPC_1"]/div/a')
      if submit.is_displayed():
            submit.click()


if __name__ == '__main__':
    # 填入自己的用户名,密码
    username = 'username'
    password = 'password'
    tb = taobao()
    tb.login(username, password)
    tb.clear_cart()

Goland 发表于 2021-7-22 16:35:21

所以,我淘宝的反爬虫机制到底是什么
页: [1]
查看完整版本: 破解淘宝登录滑块机制