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()
           
  • 相关阅读:
    if语法案例
    其他6-break,continue,exit,return区别
    其他5-6种产生随机数的方法
    其他4-shell脚本后台运行知识
    算法练习 第三周
    回顾MySQL基础
    jsp中使用jQuery获取窗口高度不正确的问题
    初学java 学生管理系统——v04版本 改用web
    web项目中跳转路径的使用
    tomcat部署项目的方式
  • 原文地址:https://www.cnblogs.com/ydf0509/p/7975850.html
Copyright © 2011-2022 走看看