zoukankan      html  css  js  c++  java
  • 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("path	oyourchromedriver.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[1]/div[1]/a[1]').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[contains(@class, 'btn_slide')]")
                    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[4]/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[2]')
            if submit.is_displayed():
                submit.click()
    
    
    if __name__ == '__main__':
        # 填入自己的用户名,密码
        username = 'username'
        password = 'password'
        tb = taobao()
        tb.login(username, password)
        tb.clear_cart()

    https://mp.weixin.qq.com/s/SOL1mOJ5Wfl3ISFL5szzXA

  • 相关阅读:
    windows类型
    网络编程socket、udp
    mem族函数与str族函数(待填)
    位运算符的用处(待填)
    c51较c比较,单片机最小系统
    数据结构之 顺序栈的操作
    [置顶] 数据结构之 顺序栈的操作
    java中常用的帮助类。加快开发速度
    php实现安装程序的 安装
    php压缩文件帮助类
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/13137603.html
Copyright © 2011-2022 走看看