zoukankan      html  css  js  c++  java
  • selenium chrome登陆手机 pc淘宝

    接口登录淘宝,困难度极高,没有人已经实现过。

    淘宝登录selenium 手机版  pc版。

    由于每天需要使用ip代理大批量的异地登录淘宝帐号,这种情况必然会出现淘宝滑动验证码,使用ActionChains,

    使用手机版m.taobao.login登录,采用短信验证码交互方式登录,获取验证码按钮的点击需要使用TouchActions,不能通过click触发。

    但魔蝎科技app也没有提供淘宝在后台处理登录。

    #coding=utf8
    import platform,time,random,os
    
    
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.touch_actions import TouchActions
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.options import Options
    
    import config
    
    #print  os.getenv('PATH')
    
    
    class   BrowserUtil(object):
        def __init__(self, is_mobile=0):
            self.chrome_options = Options()
            self.cookies_dict = {}
            self.set_useragent(is_mobile)
    
        def __del__(self):
            pass
            self.driver.quit()
    
        def set_options(self,headless=1,display_pictures=0):
            # self.chrome_options.binary_location = '/opt/google/chrome/chrome'
            self.chrome_options.add_argument('lang=zh_CN.UTF-8')
            if headless == 1:
                self.chrome_options.add_argument('--headless')
                self.chrome_options.add_argument('--disable-gpu')
            if not display_pictures:
                prefs = {"profile.managed_default_content_settings.images": 2}
                self.chrome_options.add_experimental_option("prefs", prefs)
    
        def set_proxy(self):
            self.chrome_options.add_argument('--proxy-server=http://' + '112.85.84.154:1131')
    
        def set_useragent(self,is_mobile):
            if not is_mobile:
                self.chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"')
    
            else:
                self.chrome_options.add_argument('user-agent="Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36"')
                mobileEmulation = {'deviceName': 'Nexus 6P'}
                self.chrome_options.add_experimental_option('mobileEmulation', mobileEmulation)
    
    
        def setup_browser(self,maxsize=1):
            self.driver = webdriver.Chrome(chrome_options=self.chrome_options)
            if maxsize:
                self.driver.maximize_window()
            self.driver.set_page_load_timeout(60)
            self.driver.implicitly_wait(30)
    
        def touch_element(self,element):
            TouchActions(self.driver).tap(element).perform()
    
        def get_cookies_dict(self):
            driver_cookie = self.driver.get_cookies()
            for c_dict in driver_cookie:
                self.cookies_dict[c_dict['name']] = c_dict['value']
    
        def delete_all_cookies(self):
            self.driver.delete_all_cookies()
    
        def add_cookie(self,cookie_dict):
            """
            :type cookie_dict :dict
            """
    
            for k,v in cookie_dict.items():
                cookie = {'name':k , 'value':v}
                self.driver.add_cookie(cookie)
    
        def wait_element_by_id(self, wait_time, element_id):
            WebDriverWait(self.driver, wait_time, 0.5).until(EC.presence_of_element_located((By.ID, element_id)))
    
        def click_element_by_id(self,element_id):
            self.driver.find_element_by_id(element_id).click()
    
        def get(self,url):
            self.driver.get(url)
    
        def save_screen(self,filename):
            if platform.system() == 'Windows':
                pic_path = config.screen_pic_windows
            else:
                pic_path = config.screen_pic_linux
            if not os.path.exists(pic_path):
                os.makedirs(pic_path)
            filenamex = pic_path + filename
            self.driver.save_screenshot(filenamex)
    
        def get_track(self,distance):
            track = [ ]
            current = 0
            mid = distance *4 / 5
            t = 0.2
            v = 0
            while current < distance:
                if current < mid:
                    a = 2
                else:
                    a = -3
                v0 = v
                v = v0 + a * t
                move = v0 * t + 1 / 2 * a * t * t
                current += move
                track.append(round(move))
            return track
        
        def drag_element(self,element):
            tracks = self.get_track(500)
            
            action = ActionChains(self.driver)
            action.move_to_element(element).perform()
            action.click_and_hold(on_element=element).perform()
     
            for x  in tracks:
                yoffset = random.randint(-10, 10)
                time_sleep = random.randint(1,2)/10.0
                time_sleep =  random.randint(50,100)/1000.0
                time.sleep(time_sleep)
                action.move_to_element_with_offset(to_element=element, xoffset=x,yoffset=yoffset).perform()
                #ActionChains(self.driver).drag_and_drop_by_offset(element,500,yoffset).perform()
            action.release(on_element=element).perform()
           
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/ydf0509/p/7975850.html
Copyright © 2011-2022 走看看