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()
       
复制代码

 

posted @   北风之神0509  阅读(14433)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示