微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于Python的selenium学习方法合集

1、webDriver方法属性


chrome浏览器

from selenium import webdriver
# Chrome浏览器驱动
self.driver = webdriver.Chrome()
# 打开的网址
self.driver.get('http://www.baidu.com')

1.1)窗口最大化

self.driver.maximize_window()

1.2)关闭浏览器

self.driver.quit()

1.3)关闭当前tab页

self.driver.close()

1.4)刷新

self.driver.refresh()

1.5)后退

self.driver.back()

1.6)前进

self.driver.forward()

1.7)获取当前网页标题

self.driver.title

1.8)获取当前浏览器名称

self.driver.name

1.9)获取当前网页地址url

self.driver.current_url

1.10)获取窗口句柄

self.driver.window_handles # 所有句柄
self.driver.current_window_handle # 当前窗口句柄

1.11)切换窗口

self.driver.switch_to.window(w)

1.12)切换到alert

self.driver.switch_to.alert

1.13)切换到frame

self.driver.switch_to.frame(f)

1.14)切换到活动元素

self.driver.switch_to.active_element

2、元素定位


2.1)通过id定位元素

self.driver.find_element_by_id('kw').send_keys('selenium')
self.driver.find_element_by_id('su').click()

2.2)通过标签名称定位元素

# find_element_by_name()可能返回多个元素,查找的时候返回第1个
# find_elements_by_name()返回一个集合
self.driver.find_element_by_name('wd').send_keys('selenium')

2.3)通过链接文本定位元素

self.driver.find_element_by_link_text('百度首页').click()

2.4)通过部分链接文本定位

self.driver.find_element_by_partial_link_text('首页').click()

2.5)通过xpath定位

# 熟悉xpath语法
self.driver.find_element_by_xpath('//*[@id="kw"]').send_keys('selenium')

2.6)通过标签名称定位

input = self.driver.find_element_by_tag_name('input')[0]  # tag太多了
print(input)

2.7)通过css选择器定位

# copy -> css selector
self.driver.find_element_by_css_selector('#kw').send_keys('百度文库')

2.8)通过css class定位

self.driver.find_element_by_class_name('s_ipt').send_keys('selenium')

补充:也可直接用find_element()方法

from selenium.webdriver.common.by import By
self.driver.find_element(By.ID, value='kw').send_keys('selenium')

3、WebElement常用属性

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
ele = driver.find_element_by_id('kw')

3.1)标示

print(ele.id) # b9012f3c-c184-41b1-879a-a2f78304e3c9

3.2)宽高

print(ele.size) # {'height': 44, 'width': 548}

3.3)宽高和坐标

print(ele.rect) # {'height': 44, 'width': 548, 'x': 441, 'y': 188.40000915527344}

3.4)标签名称

print(ele.tag_name) # input

3.5)文本内容

print(ele.text)

4、WebElement的方法

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
ele = driver.find_element_by_id('kw')

4.1)单击

ele.click()

4.2)输入内容

ele.send_keys('selenium')

4.3)获取属性

print(ele.get_attribute('type')) # type/name/value   text

4.4)是否被选中

print(ele.is_selected()) # False

4.5)是否可用

print(ele.is_enabled()) # True

4.6)是否显示

print(ele.is_displayed()) # True

4.7)清空内容

ele.clear()

4.8)css属性

print(ele.value_of_css_property('value'))

5、Select常用方法

from selenium.webdriver.support.select import Select
selectButton = self.driver.find_element_by_id('provise')
selectElement = Select(selectButton)

5.1)根据索引选择(deselect_by_index:反选)

selectElement.select_by_index(4)

5.2)根据值选择(deselect_by_value:反选)

selectElement.select_by_value('hangzhou')

5.3)根据文本选择(deselect_by_visible_text:反选)

selectElement.select_by_visible_text('杭州')

5.4)获取所有选项

for option in selectElement.options:
    print(option.text)

5.5)所有选中选项(deselect_all:反选)

selectElement.all_selected_options()

5.6)第一个选择项

selectElement.first_selected_option()

6、弹框的处理:alert、confirm、prompt


弹框类型:
alert:提示
confirm:用于确认
prompt:输入内容
方法/属性
6.1)accept():接受

alert = self.driver.switch_to.alert
print(alert.text)
alert.accept()

6.2)dismiss():取消
text:显示的文本

confirm = self.driver.switch_to.alert
print(confirm.text)
confirm.dismiss()

6.3)send_keys(“keys”):输入内容

prompt= self.driver.switch_to.alert
prompt.send_keys("20")
prompt.accept()

7、frame、iframe定位


frame标签种类:
frameset(和普通标签一样)/frame/iframe:
使用方法
switch_to.frame(reference):切换frame,reference是传入的参数(id、name、index等)
switch_to.default_content():返回主文档
switch_to.parent_frame():返回父文档

    top = driver.find_element_by_name('top')
    driver.switch_to.frame(top)
    driver.find_element_by_xpath('XPATH')

8、webdriverwait-显示等待


8.1) 模块引入

from selenium.webdriver.support.wait import webdriverwait

8.2)webdriverwait参数介绍:
driver:传入WebDriver实例
timeout:超时时间,等待的最长时间
poll_frequency:调用until或until_not中的方法的间隔时间,认0.5秒
ignored_exceptions:忽略的异常
8.3)webdriverwait方法介绍:
until(method, message)、until_not(method, message)
method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message:如果超时,抛出TimeoutException,将message传入异常

from selenium.webdriver.support.wait import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    driver.maximize_window()
    driver.find_element_by_id('kw').send_keys('selenium')
    driver.find_element_by_id('su').click()
    webdriverwait(driver, 2).until(EC.title_is('selenium_百度搜索'))

补充:expected_conditions模块:用于判断网页上的元素是否存在等,一般与webdriverwait配合使用
模块引入:

from selenium.webdriver.support import expected_conditions as EC

方法介绍:
(1) title_is(‘str’):判断当前页面的title是否等于str
(2) EC.title_contains(‘str’):判断当前页面的title是否包含str
(3) EC.url_contains(‘url’):判断当前页面的url是否包含url
(4) EC.url_matches(‘expression’):判断当前页面的url是否满足字符串正则表达式匹配
(5) EC.presence_of_element_located((By.ID, ‘id’)):判断元素是否出现,只要有一个元素出现,返回元素对象
(6) EC.visibility_of(driver.find_element(By.ID, ‘id’)):判断元素是否可见,返回元素对象
(7) EC.text_to_be_present_in_element((By.NAME, ‘name’), ‘text’):判断元素是否包含指定文本,返回布尔值
(8) EC.frame_to_be_available_and_switch_to_it(By.xpath, ‘path’):判断该frame是否可以切换,可以则,返回True并且切换
(9) EC.element_to_be_clickable((By.NAME, ‘name’)):判断某个元素是否可见且可点击,是返回该元素,否则返回False
(10) EC.element_to_be_selected(driver.find_element(By.xpath, ‘path’)):判断某个元素是否被选中,一般用在下拉列表
(11) EC.alert_is_present():判断页面上是否存在alert,如果有就切换到alert并返回alert的内容

9、Selenium等待条件 - ActionChains类


使用方法

from selenium.webdriver import ActionChains
ActionChains(driver).click(btn).perform()

常用方法

在这里插入图片描述

selenium鼠标和键盘事件 - ActionChains类

在这里插入图片描述

10、selenium屏幕截图


方法
(1)save_screenshot(filename):获取当前屏幕截图并保存为指定文件,filename为文件名(包含文件路径)
(2)get_screenshot_as_base64():获取当前屏幕截图base64编码字符串
(3)get_screenshot_as_file(filename)获取当前的屏幕截图,使用完整路径
(4)get_screenshot_as_png():获取当前屏幕截图的二进制文件数据

import time
filePath = 'D:\Python\\01Demo\\venv\phone'
fileName = time.strftime('%Y%m%d%H%m%s', time.localtime())+'.png'
print(filePath + '\\' + fileName)
self.driver.save_screenshot(filePath + '\\' + fileName)

11、pyautogui:图形用户界面自动化工具

import pyautogui
# 确定鼠标当前位置
pyautogui.positon()
# 移动
pyautogui.moveto(x,y)
# 点击
pyautogui.mouseDown()
pyautogui.mouseUp()
pyautogui.click()
pyautogui.doubleClick()
pyautogui.middleClick()
pyautogui.rightClick()
# 拖动
pyautogui.dragTo(x,y)
# 控制键盘
pyautogui.typewrite(s)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐