0


Python__模块(OPT-自动化-Web端)__selenium

简介

自动化测试(Web端)

安装

pip install selenium


参数列表

element

定位1个元素
element

定位多个元素

elements

获取元素属性

element.get_attribute(name)

元素定位方式

元素id定位

By.ID

元素class定位

By.CLASS_NAME

元素name定位

By.NAME

完整超链接定位(链接文本内容)

By.TAG_NAME

css选择器进行定位

By.CSS_SELECTOR

xpath表达式定位

By.XPATH

浏览器

设置浏览器的大小

set_window_size(宽,高)

控制浏览器前进|后退

forward()|back()

清除文本

clear()

模拟按键输入

send_keys(value)

单击元素

click()

用于提交表单

submit()

设置该元素是否用户可见

is_displayed()

返回元素的尺寸

size

获取元素的文本

text

请求网页

get(网址)

刷新浏览器

refresh()

关闭浏览器

quit()

关闭当前窗口

close()

执行JavaScripts代码

execute_script('js代码')

页面窗口

用于获取当前页面的标题

title

获得当前页面的UR

current_url

获取搜索条目的文本信息

text

保存网页截图

save_screenshot('screen.png')

获得当前窗口句柄

current_window_handle

返回所有窗口的句柄到当前会话

window_handles

用于截取当前窗口,并把图片保存到本地

get_screenshot_as_file(self, filename)

用于切换到相应的窗口

switch_to.window(driver.window_handlers[index])

鼠标 / 键盘事件

【注释】

在WebDriver中,将这些关于鼠标操作的方法,

封装在ActionChanis类提供

【ActionChains基本用法】

执行原理:当你调用ActionChains的方法时,不会立即执行,

而是会将所有的操作按顺序存放在一个队列里

当你调用perform()方法时,队列中的时间会依次执行

【例子】

event=ActionChains(driver)

event.key_down(Keys.CONTROL, enter)

鼠标事件

单击

click(on_element=None)

左键,不松开

click_and_hold(on_element=None)

右键

context_click(on_element=None)

双击

double_click(on_element=None)

从当前位置移动到某个坐标

move_by_offset(xoffset, yoffset)

移动到某个元素

move_to_element(to_element)

拖动元素1到元素2

drag_and_drop(元素1,元素2)

执行鼠标悬停操作

move_to_element(above)

用于模拟鼠标右键操作,在调用时需要指定元素定位

context_click()

在某个元素位置松开鼠标左键

release(on_element=None)

拖拽到某个坐标然后松开

drag_and_drop_by_offset(source, xoffset, yoffset)

移动到距某个元素(左上角坐标)多少距离的位置

move_to_element_with_offset(to_element, xoffset, yoffset)

执行链中的所有动作,

执行所有ActionChains中存储的行为。

perform()

键盘事件

按下键

key_down(value, element=None)

松开键

key_up(value, element=None)

输入内容

send_key(内容)

删除键(BackSpace)

send_keys(Keys.BACK_SPACE)

空格键(Space)

send_keys(Keys.SPACE)

制表键(Tab)

send_keys(Keys.TAB)

回退键(Esc)

send_keys(Keys.ESCAPE)

回车键(Enter)

send_keys(Keys.ENTER)

全选(Ctrl+A)

send_keys(Keys.CONTROL,'a')

复制(Ctrl+C)

send_keys(Keys.CONTROL,'c')

剪切(Ctrl+X)

send_keys(Keys.CONTROL,'x')

粘贴(Ctrl+V)

send_keys(Keys.CONTROL,'v')

键盘F1...Fn

send_keys(Keys.F1...Fn)

发送某个键到当前焦点的元素

send_keys(*keys_to_send)

发送某个键到指定元素

send_keys_to_element(element, *keys_to_send)

iframe获取

将当前定位的主体切换为frame/iframe表单的内嵌页面中

switch_to_frame()

跳回最外层的页面

switch_to_default_content()

默认可以直接取表单的id 或name属性。

如果iframe没有可用的id和name属性,

则可以 通过下面的方式进行定位。

switch_to.frame()

警告框处理

【注释】

在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单

具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用 text/accept/dismiss/ send_keys等方法进行操作。
返回alert/confirm/prompt中的文字信息text
接收现有警告框

accept()

解散现有警告框

dismiss()

发送文本至警告框,keysToSend;

将文本发送至警告框

send_keys(keysToSend)

下拉框选择

【注释】

下拉框选择操作(导入选择下拉框Select类,使用该类处理下拉框操作。)

select标签的value属性的值

select_by_value('选择值')

下拉框的索引

select_by_index('索引值')

下拉框的文本值

select_by_visible_testx('文本值')

cookie获取

【注释】

WebDriver提供了操作Cookie的相关方法,

可以读取、添加和删除cookie信息。

获得所有cookie信息

get_cookies()

返回字典的key为'name'的cookie信息

get_cookie(name)

添加cookie.'cookie_dict'指字典为对象,必须有name和value值

add_cookie(cookie_dict)

删除cookie信息.“name”是要删除的cookie的名称

delete_cookie(name,optionsString)

【参数】

optionsString:cookie的选项,目前支持的选项包括“路径”,“域”

删除所有cookie信息

delete_all_cookies()


参考代码

【综合】初始化配置

class web:
    def __init__(self) -> None:
        self.headers={
           'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
           'Connection': 'close'
        }
        self.path=''
        self.chrome='chromedriver.exe'
        self.ie='C:/Users/Administrator/Documents/IEDriverServer.exe'
        self.driver=webdriver.Ie(self.ie)
        self.url='https://www.xxx.com/'
        self.time = 5
        self.keywords='demo'

【综合】模式-有界面形态1

def imitate(self):
    #----------------------有界面形态-----------------------#
    from selenium.webdriver.common.by import By  # 新版本修改
    driver = self.driver
    driver.get("http://www.xxx.com/")

    ''' 设置浏览器的大小 '''
    driver.set_window_size(1600, 600)
    
    ''' 输入内容 '''
    driver.find_element(By.ID, "kw").send_keys("美女")
    time.sleep(1)
    
    ''' 点击按钮 '''
    driver.find_element(By.ID, "su").click()
    time.sleep(1)
    
    ''' 通过javascript设置浏览器窗口的滚动条位置 '''
    js = "window.scrollTo(100,1200);"
    driver.execute_script(js)
    time.sleep(1)
    
    ''' 截取当前窗口,并指定截图图片的保存位置 '''
    driver.get_screenshot_as_file("img.jpg")
    
    ''' 不关闭浏览器 '''
    input("")

【综合】模式-有界面形态2

def o_driver(self):
    ''' 正在运行的浏览器进行操作 '''
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.chrome.service import Service
    from lxml import etree
    import requests

    # 运行步骤: 先开启远程调试端口,自定义网页,连接端口测试
    # -> 步骤1
    # cmd 运行: start chrome.exe --remote-debugging-port=9527 --user-data-dir=./
    # 打开的浏览器中,自定义网页
    
    # -> 步骤2:进行端口连接
    # 获取浏览器控制权
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
    # 浏览器驱动存放路径
    chrome_driver = Service("chromedriver.exe")
    driver = webdriver.Ie(service=chrome_driver, options=chrome_options)
    # 窗口切换
    window_handles = driver.window_handles
    index = 0  # 0 代表当前窗口 -1: 左  1: 右
    driver.switch_to.window(window_handles[index])
    address = driver.current_url
    # 请求网页
    html = requests.get(url=address, headers=self.headers)
    tree = etree.HTML(html.content)
    list = tree.xpath("//*/title/text()")
    print(list)

【综合】模式-无界面形态

def imitate_2(self):
    #----------------------无界面形态-----------------------#
    """
    chrome_options = webdriver.ChromeOptions()
    # 增加无界面选项
    chrome_options.headless=True
    browser = webdriver.Chrome(options = chrome_options)
    browser.get('https://www.xxx.com/')
    print(browser.title)
    browser.quit()
    """
    from selenium import webdriver
    import time
    from selenium.webdriver.chrome.options import Options

    chrome_options = Options()
    chrome_options.add_argument("--no-sandbox")                        # 解决DevToolsActivePort文件不存在的报错
    chrome_options.add_argument("window-size=1920x3000")               # 指定浏览器分辨率
    chrome_options.add_argument("--disable-gpu")                       # 谷歌文档提到需要加上这个属性来规避bug
    chrome_options.add_argument("--hide-scrollbars")                   # 隐藏滚动条, 应对一些特殊页面
    chrome_options.add_argument("blink-settings=imagesEnabled=false")  # 不加载图片, 提升速度
    chrome_options.add_argument("--headless")                          # / 浏览器不提供可视化页面. 
                                                                       # linux下如果系统不支持可视化不加这条会启动失败
                                                                       # ------------------------------------------- /
    chrome_options.binary_location = (
        "C:/Program Files/Google/Chrome/Application/chrome.exe"        # 手动指定本机电脑使用的浏览器位置
    )

    # / 创建一个driver,进行后面的请求页面等操作,
    # executable_path指定本机中chromedriver.exe的位置
    # ---------------------------------------------- /
    browser = webdriver.Chrome(
        chrome_options=chrome_options, executable_path="chromedriver.exe"
    )
    browser.get("https://www.xxx.com/")
    print(browser.title)
    browser.quit()
    pass

【综合】Event事件

def event(self):
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/mouseover.htm')

    ''' 鼠标移动到此元素,在下面的input框中会显示(Mouse moved) '''
    write = driver.find_element(By.XPATH,'//input[@value='Write on hover']')
    ''' 鼠标移动到此元素,会清空下面input框中的内容 '''
    blank = driver.find_element(By.XPATH,'//input[@value='Blank on hover']') 
    result = driver.find_element(By.NAME,'t1')
    
    action = ActionChains(driver)

    ''' 移动到write,显示(Mouse moved) '''
    action.move_to_element(write).perform()      
    print(result.get_attribute('value'))

    # action.move_to_element(blank).perform()
    ''' 移动到距离当前位置(10,50)的点,与上句效果相同,移动到blank上,清空 '''
    action.move_by_offset(10, 50).perform()     
    print(result.get_attribute('value'))

    ''' 移动到距离blank元素(10,-40)的点,可移动到write上 '''
    action.move_to_element_with_offset(blank, 10, -40).perform() 
    print(result.get_attribute('value'))
    sleep(2)

【综合】模拟鼠标

def event_m(self):
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/dragDropMooTools.htm')

    dragger = driver.find_element(By.ID,'dragger')                 # 被拖拽元素
    item1 = driver.find_element(By.XPATH,'//div[text()='Item 1']') # 目标元素1
    item2 = driver.find_element(By.XPATH,'//div[text()='Item 2']') # 目标2
    item3 = driver.find_element(By.XPATH,'//div[text()='Item 3']') # 目标3
    item4 = driver.find_element(By.XPATH,'//div[text()='Item 4']') # 目标4

    action = ActionChains(driver)

    ''' 1.移动dragger到item1 ''' 
    action.drag_and_drop(dragger, item1).perform()                              
    sleep(2)
    
    ''' 2.效果与上句相同,也能起到移动效果 '''
    action.click_and_hold(dragger).release(item2).perform()                     
    sleep(2)
    
    ''' 3.效果与上两句相同,也能起到移动的效果 '''
    action.click_and_hold(dragger).move_to_element(item3).release().perform()   
    sleep(2)
    
    ''' 4.移动到指定坐标 '''
    # action.drag_and_drop_by_offset(dragger, 400, 150).perform()               
    
    ''' 5.与上一句相同,移动到指定坐标 ''' 
    action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() 
    sleep(2)
    driver.quit()

【综合】模拟按键

def event_k(self):
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/keypress.htm')

    key_up_radio = driver.find_element(By.ID,'r1')         # 监测按键升起
    key_down_radio = driver.find_element(By.ID,'r2')       # 监测按键按下
    key_press_radio = driver.find_element(By.ID,'r3')      # 监测按键按下升起

    enter = driver.find_elements(By.XPATH,'//form[@name='f1']/input')[1]   # 输入框
    result = driver.find_elements(By.XPATH,'//form[@name='f1']/input')[0]  # 监测结果

    ''' 监测key_down '''
    key_down_radio.click()
    ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()
    print(result.get_attribute('value'))

    ''' 监测key_up '''
    key_up_radio.click()
    enter.click()
    ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()
    print (result.get_attribute('value'))

    ''' 监测key_press '''
    key_press_radio.click()
    enter.click()
    ActionChains(driver).send_keys('a').perform()
    print (result.get_attribute('value'))
    driver.quit()

    ''' 组合键 '''
    # action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # ctrl+a
    # action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # ctrl+c

标签: python

本文转载自: https://blog.csdn.net/werdasooooo/article/details/134649248
版权归原作者 vip飞梦 所有, 如有侵权,请联系我们删除。

“Python__模块(OPT-自动化-Web端)__selenium”的评论:

还没有评论