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()
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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 热点速览」