加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python自动化selenium封装

发布时间:2020-12-20 12:47:23 所属栏目:Python 来源:网络整理
导读:# coding = utf-8 from selenium.webdriver.common.action_chains import ActionChains from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC import time import os from selenium.webdriver.support.select
# coding = utf-8
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from selenium.webdriver.support.select import Select
from read_init import ReadIni
from selenium.webdriver.common.keys import Keys
from handle_json import handle_json


#类使用
class SelenimuDriver():
    def __init__(self):
        self.driver = self.open_browser()

    def open_browser(self,browser=chrome):
        try:
            if browser == chrome:
                driver = webdriver.Chrome()
            elif browser == firefox:
                driver = webdriver.Firefox()
            elif browser == ie:
                driver = webdriver.Ie()
            else:
                driver = webdriver.Edge()    
            time.sleep(1)
            return driver
        except:
            print("open browser fail!")
            return None

    def get_url(self,url):
        if self.driver !=None:
            self.driver.maximize_window()
            if http:// in url:
                self.driver.get(url)
            else:
                print("Your url have a problem!")
        else:
            print(can‘t get browser)
        self.driver.quit()

    def handle_windows(self,*args):
        value = len(args)
        if value == 1:
            if args[0] == max:
                self.driver.maximize_window()
            elif args[0] == min:
                self.driver.minimize_window()
            elif args[0] == back:
                self.driver.back()
            elif args[0] == go:
                self.driver.forward()
            elif args[0] == refresh:
                self.driver.refresh()
            else:
                print(don‘t have this operating)
        elif value == 2:
           self. driver.set_window_size(args[0],args[1])
        else:
            print(You Parameters is error!)
        time.sleep(4)
        self.driver.quit()

    def assert_title(self,title_name = None):
        ‘‘‘
        判断title是否正确
        :param title_name:
        :return: get_title()
        ‘‘‘
        if title_name != None:
            get_title = EC.title_contains(title_name)
            return get_title(self.driver)

    def open_url_is_true(self,url,title_name = None):
        self.get_url(url)
        return self.assert_title(title_name)

    def close_driver(self):
        self.driver.close()

    def switch_windows(self,title_name=None):
        ‘‘‘
        切换windows
        :param title_name:
        :return:
        ‘‘‘
        handle_list = self.driver.window_handles
        current_handle = self.driver.current_window_handle
        for i in handle_list:
            if i != current_handle:
                time.sleep(2)
                self.driver.switch_to.window(i)
                if self.assert_title(title_name):
                    break
        time.sleep(2)
        self.driver.find_element_by_id(userId).send_keys(test)
        time.sleep(2)

    def element_isdisplay(self,element):
        flag = element.is_displayed()
        if flag == True:
            return element
        else:
            return False

    def get_element(self,info):
        ‘‘‘
        获取元素element
        :param by:
        :param value:
        :return:
        ‘‘‘
        try:
            by,value = self.get_local_element(username)
            element = None
            if by == id:
                element = self.driver.find_element_by_id(value)
            elif by == name:
                element = self.driver.find_element_by_name(value)
            elif by == css:
                element == self.driver.find_element_by_css_selector(value)
            elif by == class:
                element == self.driver.fing_element_by_class_name(value)
            else:
                element == self.driver.find_element_by_xpath(value)
        except:
            print("定位方式:",by,"定位值",value,"定位出现错误,没有定位成功")

        return self.element_isdisplay(element)

    def elements_isdisplay(self,elements):
        flag_list = []
        flags = elements.is_displayed()
        for flag in flags:
            if flag == False:
                continue
            else:
                flag_list.append(flag)
        return flag_list


    def get_elements(self,info):
        ‘‘‘
        获取元素element
        :param by:
        :param value:
        :return:
        ‘‘‘
        try:
            elements = None
            elements = []
            by,value = self.get_local_element(info)
            if by == id:
                elements = self.driver.find_elements_by_id(value)
            elif by == name:
                elements = self.driver.find_elements_by_name(value)
            elif by == css:
                elements == self.driver.find_elements_by_css_selector(value)
            elif by == class:
                elements == self.driver.fing_elements_by_class_name(value)
            else:
                elements == self.driver.find_elements_by_xpath(value)
        except:
            print("定位方式:","定位出现错误,没有定位成功")
        return self.elements_isdisplay(elements)

    def get_list_element(self,info,index):
        elements = self.get_elements(info)
        if index > len(elements):
            return  None
        return elements[index]

    def get_level_element(self,info_level,node_info):
        ‘‘‘

        :param by:
        :param value:
        :param node_by:
        :param node_value:
        :return:
        ‘‘‘
        element = self.get_element(info_level)
        node_by,node_value = node_info
        if element == False:
            return False

        if node_by == id:
            node_element = element.find_element_by_id(node_value)
        elif node_by ==name:
            node_element = element.find_element_by_name(node_value)
        elif node_by ==css:
            node_element = element.find_element_by_css_selector(node_value)
        elif node_by ==class:
            node_element = element.find_element_by_class_name(node_value)
        else:
            node_element = element.find_element_by_xpath(node_value)
        return self.element_isdisplay(node_element)


    def assert_element(self,element):
        pass

    def send_value(self,key):
        ‘‘‘
        输入值
        ‘‘‘
        element = self.get_element(by,value)
        if element == False:
            print("输入失败,定位元素不可编辑")
        else:
            if element != None:
                element.send_keys(key)
            else:
                print("输入失败,定位元素没找打")

    def click_element(self,info):
        ‘‘‘
        点击元素
        :param by:
        :param value:
        :return:
        ‘‘‘
        element = self.get_element(info)
        if element != False:
            if element != None:
                element.click()
            else:
                print("点击失败,定位元素没有找到")
        else:
            print("点击失败,元素不可见")

    def check_box_isselected(self,check = None):

        element = self.get_element(info)
        if element != False:
            flag = element.is_selected()
            if flag == True:
                if check != check:
                    self.click_element(info)
            else:
                if check == check:
                    self.click_element(info)
        else:
            print("元素不可见,没办法选择")


    def get_local_element(self,info):
        data = ReadIni.get_value(info)
        data_info = data.split(>)
        # print(data_info)
        # by = data_info[0]
        # local = data_info[1]
        #[name,email]
        return data_info

    def get_selected(self,value_index,index=None):
        ‘‘‘
        通过index获取我们seleced,然后选择我们selected
        :param info:
        :param value_index:
        :param index:
        :return:
        ‘‘‘
        selected_element = None
        if index != None:
            selected_element = self.get_list_element(info,index)
        else:
            selected_element = self.get_element(info)
        Select(selected_element).select_by_index(value_index)

    def upload_file(self,file_name):
        ‘‘‘
        上传文件
        :param file_name:
        :return:
        ‘‘‘
        pykey = PyKeyboard()
        # pykey.tap_key(pykey.shift_key)
        pykey.type_string("D:downloadtest.png")
        time.sleep(2)
        pykey.tap_key(pykey.enter_key)

    def upload_file_function(self,file_name):
        pass
        # 先获取到上传文件的元素标签类型(input file) send_keys上传文件

    def calendar(self,value):
        ‘‘‘
        修改日历
        :param info:
        :param value:
        :return:
        ‘‘‘
        element = self.get_element(info)
        try:
            element.get_attribute(readonly)
            self.js_excute_calendar(info)
        except:
            print("这个不是只读熟悉的日历")
        element.clear()
        self.send_value(info.value)

    def moveto_element_mouse(self,info):
        ‘‘‘
        移动鼠标
        :param info:
        :return:
        ‘‘‘
        element = self.get_element(info)
        ActionChains(self.driver).move_to_element(element).perform()


    def refresh_f5(self):
        ‘‘‘
        强制刷新
        ‘‘‘
        ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()

    def switch_iframe(self,tag=None):
        ‘‘‘
        切换iframe
        :param info:
        :param tag:
        :return:
        ‘‘‘
        if info != None:
            iframe_element = self.get_element(info)
            self.driver.switch_to.frame(iframe_element)
        else:
            self.driver.switch_to.default_content()

    def switch_alert(self,value=None):
        ‘‘‘
        系统级弹窗
        :param info: 确认or取消
        :param value: 是否需要输入值
        :return:
        ‘‘‘
        windows_alert = self.driver.switch_to.alert
        if info == accept:
            if value == None:
                windows_alert.accept()
            else:
                windows_alert.send_keys(value)
                windows_alert.accept()
            windows_alert.accept()
        else:
            windows_alert.dismiss()

    def scroll_get_element(self,list_info,str_info):
        t = True
        list_element = self.get_elements(list_info)
        js = document.documentElement.scrollTop = 100000;
        while t:
            for element in list_element:
                title_name = element.find_element_by_tag_name(p).text
                if title_name in str_info:
                    element.click()
                    t = False
            self.driver.execute_script(js)
            time.sleep(3)

    def scroll_element(self,info):
        js = document.documentElement.scrollTop = 1000;
        t = True
        while t:
            try:
                self.get_element(info)
                t = False
            except:
                self.driver.execute_script(js)

    def get_cookie(self):
        cookie = self.driver.get_cookies()
        handle_json.write_data(cookie)

    def set_cookie(self):

        cookie = handle_json.get_data()
        self.driver.delete_all_cookies()
        time.sleep(1)

        self.driver.add_cookie(cookie)
        time.sleep(2)

    def save_png(self):
        now_time = time.strftime(%Y%m%d.%H.%M.%S)
        self.driver.get_screenshot_as_file(%s.png %now_time)




if __name__ == __main__:
    os.system("taskkill /f /im chromedriver.exe")
    selfnium_driver = SelenimuDriver()
#*************************测试方法


# selfnium_driver.open_browser()
# print(selfnium_driver.open_url_is_true(‘http://www.imooc.com‘,‘程序员‘))
# time.sleep(30)
# selfnium_driver.switch_windows(‘网站连接‘)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读