博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
官网pyse的修改版
阅读量:4313 次
发布时间:2019-06-06

本文共 11039 字,大约阅读时间需要 36 分钟。

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select class Pyse(object):     def __init__(self, browser='chrome'): # 初始化,生成driver         if browser == "firefox" or browser == "ff":             driver = webdriver.Firefox()         elif browser == "chrome":             option = webdriver.ChromeOptions()             option.add_argument("--start-maximized")             driver = webdriver.Chrome(chrome_options=option)         elif browser == "internet explorer" or browser == "ie":             driver = webdriver.Ie()         elif browser == "opera":             driver = webdriver.Opera()         elif browser == "phantomjs":             driver = webdriver.PhantomJS()         elif browser == 'edge':             driver = webdriver.Edge()         try:             self.driver = driver         except Exception:             raise NameError(                 "Not found %s browser,You can enter 'ie', 'ff', 'opera', 'phantomjs', 'edge' or 'chrome'." % browser)     def element_wait(self, css, secs=5): # 元素等待         '''         Waiting for an element to display.         Usage:         driver.element_wait("css=>#el",10)         '''         if "=>" not in css:             raise NameError("Positioning syntax errors, lack of '=>'.")         by = css.split("=>")[0]         value = css.split("=>")[1]         if by == "id":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.ID, value)))         elif by == "name":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.NAME, value)))         elif by == "class":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CLASS_NAME, value)))         elif by == "link_text":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.LINK_TEXT, value)))         elif by == "xpath":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.XPATH, value)))         elif by == "css":             WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))         else:             raise NameError(                 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.")     def get_element(self, css): # 获取元素         '''         Judge element positioning way, and returns the element.         '''         if "=>" not in css:             raise NameError("Positioning syntax errors, lack of '=>'.")         by = css.split("=>")[0]         value = css.split("=>")[1]         self.element_wait(css)         if by == "id":             element = self.driver.find_element_by_id(value)         elif by == "name":             element = self.driver.find_element_by_name(value)         elif by == "class":             element = self.driver.find_element_by_class_name(value)         elif by == "link_text":             element = self.driver.find_element_by_link_text(value)         elif by == "xpath":             element = self.driver.find_element_by_xpath(value)         elif by == "css":             element = self.driver.find_element_by_css_selector(value)         else:             raise NameError(                 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.")         return element     def open(self, url): # 打开url         '''         open url.         Usage:         driver.open("https://www.baidu.com")         '''         self.driver.get(url)     def max_window(self): # 浏览器窗口最大化         '''         Set browser window maximized.         Usage:         driver.max_window()         '''         self.driver.maximize_window()     def set_window(self, wide, high): # 设置浏览器窗口的宽和高         '''         Set browser window wide and high.         Usage:         driver.set_window(wide,high)         '''         self.driver.set_window_size(wide, high)
@property     def get_windows_size(self):         return self.driver.get_window_size()
def type(self, css, text): # 向文本框发送字符串         '''         Operation input box.         Usage:         driver.type("css=>#el","selenium")         '''         el = self.get_element(css)         el.send_keys(text)     def clear(self, css): # 清除输入框里的内容         '''         Clear the contents of the input box.         Usage:         driver.clear("css=>#el")         '''         el = self.get_element(css)         el.clear()     def click(self, css): # 鼠标左键单击         '''         It can click any text / image can be clicked         Connection, check box, radio buttons, and even drop-down box etc..         Usage:         driver.click("css=>#el")         '''         el = self.get_element(css)         el.click()     def right_click(self, css): # 鼠标右键单击         '''         Right click element.         Usage:         driver.right_click("css=>#el")         '''         el = self.get_element(css)         ActionChains(self.driver).context_click(el).perform()     def move_to_element(self, css): # 鼠标悬浮到目标元素上再点击         '''         Mouse over the element.         Usage:         driver.move_to_element("css=>#el")         '''         el = self.get_element(css)         ActionChains(self.driver).move_to_element(el).perform()     def double_click(self, css): # 双击操作         '''         Double click element.         Usage:         driver.double_click("css=>#el")         '''         el = self.get_element(css)         ActionChains(self.driver).double_click(el).perform()     def drag_and_drop(self, el_css, ta_css): # 拖拽操作,拼拼图         '''         Drags an element a certain distance and then drops it.         Usage:         driver.drag_and_drop("css=>#el","css=>#ta")         '''         element = self.get_element(el_css)         target = self.get_element(ta_css)         ActionChains(driver).drag_and_drop(element, target).perform()     def click_text(self, text): # 包含link的点击操作         '''         Click the element by the link text         Usage:         driver.click_text("新闻")         '''         self.driver.find_element_by_partial_link_text(text).click()     def close(self): # 关闭当前浏览器         '''         Simulates the user clicking the "close" button in the titlebar of a popup         window or tab.         Usage:         driver.close()         '''         self.driver.close()     def quit(self): # 关闭所有打开的浏览器         '''         Quit the driver and close all the windows.         Usage:         driver.quit()         '''         self.driver.quit()     def submit(self, css): # 提交操作         '''         Submit the specified form.         Usage:         driver.submit("css=>#el")         '''         el = self.get_element(css)         el.submit()     def F5(self): # 浏览器按钮刷新操作         '''         Refresh the current page.         Usage:         driver.F5()         '''         self.driver.refresh()     def js(self, script): # 执行js         '''         Execute JavaScript scripts.         Usage:         driver.js("window.scrollTo(200,1000);")         '''         self.driver.execute_script(script)     def get_attribute(self, css, attribute): # 获取属性         '''         Gets the value of an element attribute.         Usage:         driver.get_attribute("css=>#el","type")         '''         el = self.get_element(css)         return el.get_attribute(attribute)     def get_text(self, css): # 获取文本         '''         Get element text information.         Usage:         driver.get_text("css=>#el")         '''         el = self.get_element(css)         return el.text     def get_display(self, css): # 让元素展示         '''         Gets the element to display,The return result is true or false.         Usage:         driver.get_display("css=>#el")         '''         el = self.get_element(css)         return el.is_displayed()     def get_title(self): # 获取标题         '''         Get window title.         Usage:         driver.get_title()         '''         return self.driver.title     def get_url(self): # 获取url         '''         Get the URL address of the current page.         Usage:         driver.get_url()         '''         return self.driver.current_url     def get_windows_img(self, file_path): # 截图         '''         Get the current window screenshot.         Usage:         driver.get_windows_img()         '''         self.driver.get_screenshot_as_file(file_path)     def wait(self, secs): # 隐式等待         '''         Implicitly wait.All elements on the page.         Usage:         driver.wait(10)         '''         self.driver.implicitly_wait(secs)     def accept_alert(self): # 关闭提示框,确定         '''         Accept warning box.         Usage:         driver.accept_alert()         '''         self.driver.switch_to.alert.accept()     def dismiss_alert(self): # 关闭提示框,取消         '''         Dismisses the alert available.         Usage:         driver.dismiss_alert()         '''         self.driver.switch_to.alert.dismiss()     def switch_to_frame(self, css): # 向下跳一层         '''         Switch to the specified frame.         Usage:         driver.switch_to_frame("css=>#el")         '''         self.element_wait(css)         iframe_el = self.get_element(css)         self.driver.switch_to.frame(iframe_el)     def switch_to_frame_out(self): # 跳到最外层         '''         Returns the current form machine form at the next higher level.         Corresponding relationship with switch_to_frame () method.         Usage:         driver.switch_to_frame_out()         '''         self.driver.switch_to.default_content()     def open_new_window(self, css): # 打开新窗口并切换到新打开的窗口         '''         Open the new window and switch the handle to the newly opened window.         Usage:         driver.open_new_window()         '''         original_windows = self.driver.current_window_handle         el = self.get_element(css)         el.click()         all_handles = self.driver.window_handles         for handle in all_handles:             if handle != original_windows:                 self.driver.switch_to.window(handle)     # def _save_png(self, name):     #     self.get_windows_img(name)     def wait_and_save_exception(self, css, name): # 等待并保存异常         try:             self.element_wait(css, secs=5)             print(name)             return True         except Exception as e:             from lib.core.path import PICTUREPATH             name = PICTUREPATH + name + '.jpg'             print(name)             self.get_windows_img(name)             return False     def wait_and_exception(self, css):         try:             self.element_wait(css, secs=10)             return True         except Exception as e:             return False     def select_by_value(self, css, value): # 通过value修改单选项         el = self.get_element(css)         Select(el).select_by_value(value) if __name__ == '__main__':     driver = Pyse("chrome")

转载于:https://www.cnblogs.com/laosun0204/p/9229678.html

你可能感兴趣的文章
python 基本语法
查看>>
Swift - 点击箭头旋转
查看>>
git配置
查看>>
【hexo】01安装
查看>>
CI框架源码学习笔记2——Common.php
查看>>
005---书籍添加和编辑的提交数据
查看>>
使用case语句给字体改变颜色
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
JSP九大内置对象及四个作用域
查看>>
ConnectionString 属性尚未初始化
查看>>
数据结构-栈 C和C++的实现
查看>>
MySQL基本命令和常用数据库对象
查看>>
poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)
查看>>
进程和线程概念及原理
查看>>
Lucene、ES好文章
查看>>
android 生命周期
查看>>
jquery--this
查看>>
MySQL 5.1参考手册
查看>>
TensorFlow安装流程(GPU加速)
查看>>