selenium chrome登陆手机 pc淘宝

Posted 北风之神0509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
       

 

以上是关于selenium chrome登陆手机 pc淘宝的主要内容,如果未能解决你的问题,请参考以下文章

使用selenium模拟登陆,手机验证码

程序员怎样买东西呢---selenium爬取淘宝数据

通过selenium+pyautogui模拟登陆淘宝(完美实现)

Selenium+Chrome抓取淘宝数据

selenium+chrome抓取淘宝宝贝-崔庆才思路

selenium.common.exceptions.WebDriverException: Message: unknown Error: cannot find Chrome binary(示例代