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()
       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium是一个用于自动化浏览器操作的工具,而Chrome是其中一个常用的浏览器。通过SeleniumChrome的结合,可以实现对网页的自动化测试、数据爬取等功能。 在使用SeleniumChrome时,需要先安装Chrome浏览器和对应的ChromeDriver驱动程序。然后,可以使用PythonSelenium库来编写代码进行操作。 引用\[1\]和引用\[2\]中的代码展示了如何使用SeleniumChrome进行基本的网页访问和元素操作。首先,需要创建一个ChromeDriver对象,并指定ChromeDriver的路径。然后,可以使用driver.get()方法来访问指定的URL。接下来,可以使用不同的方法来查找和操作网页中的元素,比如通过ID、类名、标签名等来定位元素,并使用相应的方法进行操作。 引用\[3\]中的代码展示了如何使用ChromeOptions来设置一些选项,比如增加代理。可以通过options.add_argument()方法来添加选项,然后将options作为参数传递给webdriver.Chrome()方法来创建ChromeDriver对象。 此外,Selenium还提供了一些其他的功能,比如获取HTML标签的属性、保存页面截图等。可以使用get_property()方法来获取HTML标签中的官方属性,使用get_attribute()方法来获取HTML标签中的官方和非官方属性,使用driver.save_screenshot()方法来获取当前页面的截图。 总结起来,SeleniumChrome的结合可以实现对网页的自动化操作,包括访问网页、查找和操作元素、设置选项、获取属性和保存截图等功能。 #### 引用[.reference_title] - *1* *2* *3* [selenium使用详解以及chrome介绍](https://blog.csdn.net/Z_love_u/article/details/113645480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值