Python selenium automation commonly used functions, keyboard operations, positioning elements, web page operations, drop-down boxes, screenshots, draggable elements, mouse, drop-down boxes, check boxes, assertions, implicit waiting

from selenium import webdriver
from selenium.webdriver import ActionChains #双击操作所用的包
from selenium.webdriver.support.ui import Select #下拉框包
import time

driver=webdriver.Chrome() #打开浏览器
driver.get('http://www.baidu.com') #访问网页
driver.maximize_window() #网页最大化
driver.back() #返回
driver.forward() #向前
driver.refresh() #刷新
driver.set_window_position(y=200,x=400) #将浏览器的位置放在y=200,x=400的位置上
self.driver.set_window_size(width=200,height=400,windowHandle='current') #设置窗口大小
driver.title #获取页面标题,可用来判断当前在哪个页面
driver.page_source #获取页面源码
assert '百度' in driver.page_source #断言源码中是否包含'百度'
driver.current_url #获取当前网页的url
driver.current_window_handle #获取当前窗口句柄
driver.window_handles #获取所有窗口句柄
driver.switch_to.window(handle) #切换到窗口handle
driver.find_element_by_name('wd').send_keys('w3cschool') #name定位元素并输入'w3cschool'
driver.find_element_by_id('su').click() #id定位元素并点击
driver.find_element_by_xpath("//*[@id='2'/h3/a]").click() #xpath定位元素并点击
driver.find_element_by_ccs_selector('#kw') #ccs定位元素
driver.find_element_by_link_text('使用百度前必读') #用连接的文本定位元素
driver.find_element_by_partial_link_text('百度前必读') #用连接的部分文本定位元素
driver.find_elements_by_xpath('//input') #定位多个元素

driver.find_element('id','kw') #灵活定位法
driver.find_element('name','kd')
driver.find_element('xpath','//input[@id='kw']')
driver.find_element('link text','使用百度前必读')

driver.implicitly_wait(10) #隐式等待,找不到一个元素会等待加载,最多等待十秒,针对所有页面所有元素
driver.set_page_load_timeout(10) #只针对driver.get(url)加载页面时,等待页面所有元素加载完毕

element=driver.find_element('partial link text','百度前必读')
element.tag_name #获取元素标签名称
element.size #获取元素大小
element.text #获取元素文本信息
element.get_attribute('href') #获取元素href属性
element.get_property('href') #获取元素href属性,等价attribute

element=driver.find_element_by_id('kw')
element.clear() #清除输入框内的值
element.send_keys('天天向上') #输入值
element.get_attribute('value') #获取输入的值
element.is_displayed() #判断元素是否可见
element.is_enabled() #判断元素是否可用(可点击,可输入,可读)

element.value_of_css_property('height') #获取元素的css属性,高度
element.value_of_css_property('width') #获取元素的css属性,宽度
element.value_of_css_property('font-size') #获取字体大小属性
element.value_of_css_property('font-family') #获取字体类型属性

action_chains=ActionChains(driver) #创建双击对象
action_chains.double_click(element).perform() #对元素element进行双击

ActionChains(driver).context_click(element).perform #鼠标右键点击
ActionChains(driver).send_keys('P').perform #选择鼠标右键菜单中的粘贴(P)

driver.close() #关闭当前页面
driver.quit() #关闭浏览器

Position the drop-down box element (here is the element)

select=driver.find_element_by_name('fruit') #通过name属性定位下拉框
all_options=select.find_elements_by_tag_name('option') #获取下拉框列表中所有option元素
for option in all_options:
    print(option.text) #获取文本值
    print(option.get_attribute('value')) #获取value属性值
    print('------------------------------------------------')
    if option.text=='桃子':
        option.click() #选择‘桃子’选项
    if option.get_attribute('value')=='lizhi'
        option.click() #选择value属性值为'lizhi'的选项

Get the drop-down box object (here is the object)

select_element=Select(driver.find_element_by_xpath('//select')) #获取下拉框对象
print(select_element.first_selected_option.text) #获取下拉框的默认文本展示
all_options=select_element.options #获取下拉框中所有的选项对象
if all_options[1].is_enabled() and not all_options[1].is_selected():
    #判断下拉框中第二个元素是否可用,并且是否被选中
    select_element.select_by_index(1) #选中下拉框中第二个元素
    print(select_element.all_selected_options[0].text) #获取被选中的元素中第一个元素的文本值
    assert '西瓜' in select_element.all_selected_options[0].text #断言
    
select_element.select_by_visible_text('猕猴桃') #通过选项的文本选中
select_element.select_by_value('shanzha') #通过value属性选中选项

Encapsulate the method of selecting the drop-down box

def chose_option(driver,select_xpath,option_text):
    #driver表示浏览器,select_xpath表示定位下拉框的路径,option_text表示下拉框选项的文本值
    select=driver.find_element_by_xpath(select_xpath) #定位下拉框
    all_options=select.find_elements_by_tag_name('option') #获取下拉框中所有的选项
    for option in all_options: #遍历选项
        if option.text==option_text: #如果遍历到的选项的文本值等于传入的文本值,就进行点击
            option.click()
            return #如果选中就跳出循环

driver=webdriver.Chrome() #打开浏览器
driver.get('http://127.0.0.1/test_select.html') #访问网页
time.sleep(2)
chose_option(driver,"//select[@name='fruit']",'猕猴桃') #调用下拉框选择函数

#Get the text value of all options in the drop-down box through the deduced list

select_element=Select(driver.find_element_by_xpath('//select')) #获取下拉框对象
actual_options=select_element.options #获取下拉框中所有选项对象
actual_options_text=[option.text for option in actual_options] #通过推导式列表,获取所有选项的文本值

For multiple-selectable drop-down boxes, multiple selections, cancel selections

select_element=Select(driver.find_element_by_xpath('//select')) #获取下拉框对象
actual_options=select_element.options #获取下拉框中所有选项对象

for option in actual_options: #选中桃子和荔枝
    if option.text=='桃子':
        option.click()
    if option.get_attribute('value')=='lizhi':
        option.click

for option in select_element.all_selected_options: #获取所有被选中的选型
    print(option.text)

select_element.select_by_index(1) #通过下标选择
select_element.select_by_visible_text('荔枝') #通过文本选择
select_element.select_by_value('juzi') #通过value属性选择

time.sleep(2)
select_element.deselect_by_visible_text('荔枝') #通过文本取消选择
select_element.deselect_by_index(1) #通过下标取消选择
select_element.deselect_all() #取消所有选择

A drop-down box for matching values ​​that can be entered

from selenium import webdriver
#from selenium.webdriver import ActionChains #双击操作所用的包
from selenium.webdriver.support.ui import Select #下拉框包
from selenium.webdriver.common.keys import Keys #键盘操作的包
import time

driver=webdriver.Chrome() #打开浏览器
driver.get('http://127.0.0.1/test_input_select.html') #访问网页
time.sleep(2)

select_element=driver.find_element_by_id('select')
select_element.clear()
select_element.send_keys('Cancl') #向下拉框输入值
select_element.send_keys(Keys.ENTER) #回车选择下拉框输入的值

Insert picture description here
Single box

radio=driver.find_element_by_xpath("//input[@value='berry']") #定位单选框
radio.click()
assert radio.is_selected()==True #是否被选中
for radio in driver.find_elements_by_xpath("//input[@name='fruit']"): #依次点击选项
    time.sleep(1)
    radio.click()

Insert picture description here
Checkbox

check_box=driver.find_element_by_xpath("//input[@value='berry']") #定位复选框
check_box.click()
assert check_box.is_selected()==True #是否被选中
for check_box in driver.find_elements_by_xpath("//input[@name='fruit']"): #依次点击选项
    time.sleep(1)
    check_box.click()

Assert whether the webpage source code contains keywords

try:
    assert '<input' in driver.page_source #断言网页源码中是否包含关键字
except AssertionError:
    print('断言失败')

Screenshot operation

driver.get_screenshot_as_file(r'e:\jieping.png') #截屏并保存图片,只截浏览器范围内的屏

from PIL import ImageGrab #截屏包
im=ImageGrab.grab()
im.save("e:\\jieping1.jpg","jpeg") #整个桌面的截屏

Draggable element operation

initialPosition=driver.find_element_by_id('draggable') #获取可拖动元素1
targetPosition=driver.find_element_by_id('draggable2') #获取可拖动元素2
dragElement=driver.find_element_by_id('draggable3') #获取可拖动元素3

action_chains=ActionChains(driver) #鼠标操作的对象

action_chains.drag_and_drop(initialPosition,targetPosition).perform() #可拖动元素1拖到元素2的上面

for i in range(5):
    action_chains.drag_and_drop_by_offset(dragElement,10,10).perform() #可拖动元素3向右向下拖动五次
    time.sleep(2)

Keyboard operation elements

query=driver.find_element_by_id('query') #定位元素
query.send_keys('selenium') #输入内容
query.send_keys(Keys.ENTER) #回车
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()#组合键,全选
query.clear()  # 清除
query.send_keys(Keys.ARROW_UP)  # 向上
query.send_keys(Keys.ARROW_DOWN)  # 向下,当输入框匹配出多个值时,可用for循环配合该方法选择相应的值
query.send_keys(Keys.ARROW_LEFT)  # 向左
query.send_keys(Keys.ARROW_RIGHT)  # 向右

query.send_keys('天天向上') #向搜索框输入内容,会匹配出多个值
for i in range(3): #按三下向下键,选择第三个值
    query.send_keys(Keys.DOWN)
query.send_keys(Keys.ENTER) #点击回车进行确认

pywin32 method to operate the keyboard

import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import win32clipboard as w
import win32con
import time
import win32api

def getText():
    w.OpenClipboard() #打开剪切板
    d=w.GetClipboardData(win32con.CF_TEXT) #获取剪切板文字
    w.CloseClipboard() #关闭剪切板
    return d #返回获取到的文字

def setText(aString):
    w.OpenClipboard() #打开剪切板
    w.EmptyClipboard() #清空剪切板
    w.SetClipboardData(win32con.CF_UNICODETEXT,aString) #设置剪切板内容aString
    w.CloseClipboard() #关闭剪切板

VK_CODE={
    
     #每个键对应操作系统中的16进制,使用16进制,操作系统才能读懂
    'enter':0x0D,
    'ctrl':0x11,
    'a':0x41,
    'v':0x56,
    'x':0x58
    }

def keyDown(keyName): #按下按键
    win32api.keybd_event(VK_CODE[keyName],0,0,0)

def keyUp(keyName): #抬起按键
    win32api.keybd_event(VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)

driver=webdriver.Ie()
url='https://www.baidu.com'
driver.get(url)
content='天天向上'

setText(content) #将文字放入剪切板中
getContent=getText() #获取剪切板文字
print('剪切板内容:',getContent.decode('gbk')) #打印剪切板内容
driver.find_element_by_id('kw').click #将焦点放在输入框
time.sleep(1)
keyDown('ctrl')
keyDown('v') #粘贴剪切板的内容
keyUp('v')
keyUp('ctrl')
driver.find_element_by_id('su').click()

Mouse operation method

div=driver.find_element_by_id('div1') #定位元素
ActionChains(driver).click_and_hold(div).perform() #按住鼠标左键
time.sleep(2)
ActionChains(driver).release(div).perform() #松开鼠标左键
ActionChains(driver).move_to_element(link1).perform() #鼠标悬停在元素link1上

Guess you like

Origin blog.csdn.net/weixin_44123630/article/details/113820464