博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium(Python)总结
阅读量:4995 次
发布时间:2019-06-12

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

Python相关:(Ubuntu下)

参考http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.quit

1.下载selenium server(该服务需要运行在Java环境下,需要安装jdk)

下载的是一个jar包,放在Java安装路径的lib文件夹下。

2.安装Python相关的依赖 pip install selenium

3.使用Firefox浏览器时,在Ubuntu下需要下载 geckodriverckod https://github.com/mozilla/geckodriver/releases

解压放到/usr/local/bin 目录下。

webdriver支持的浏览器:

webdriver.Firefox

webdriver.FirefoxProfile
webdriver.Chrome
webdriver.ChromeOptions
webdriver.Ie
webdriver.Opera
webdriver.PhantomJS
webdriver.Remote
webdriver.DesiredCapabilities
webdriver.ActionChains
webdriver.TouchActions
webdriver.Proxy

from selenium import webdriver

driver = webdriver.Firefox()

元素定位:

1.可以通过这几种方法来查找元素 返回单个元素

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
element = driver.find_element_by_link_text(“百度链接”)
element = driver.find_element_by_partial_link_text(“百度”)类似模糊查询,输入链接text的一部分
element = driver.find_element_by_tag_name(‘h1’)返回第一个h1标签
element = driver.find_element_by_class_name(‘content’)返回类名为content的标签
element = driver.find_element_by_css_selector('p.content')返回如下的第一个p 标签
<p class="content">Site content goes here.</p>
这个类似css的选择器

2.返回元素列表:

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

find_element_by_ 会返回第一个符合条件的元素,当找不到元素时会报NoSuchElementException异常

当没有ID和name属性时,使用xpath

当知道<a>text</a>标签的text时 使用linkText

selenium提供两种方法定位元素:还有如下一种方法 这种方法效率更高,但是第一种更符合使用习惯
from selenium.webdriver.common.by import By

通过By类

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
driver.find_elements(By.ID,“hshg-id”)
其他属性同第一种方法,都换成大写

 

Keys包用来模拟键盘操作

from selenium.webdriver.common.keys import Keys

对于Keys 类下有哪些属性,可以在ipython中查看(已安装selenium)

下拉页面(相当于滑动下拉框到底部)

elem.send_keys(Keys.PageDown)

Keys.BACK_SPACE 删除键

Keys.SPACE 空格键

Keys.ENTER 回车键

send_keys(Keys.CONTROL,'a') 全选

send_keys(Keys.CONTROL,'c') 复制
send_keys(Keys.CONTROL,'x') 剪切
send_keys(Keys.CONTROL,'v') 粘贴

elem.send_keys("python")

elem.send_keys(Keys.RETURN) 类似鼠标点击进入
上面两句可以合写一句elem.send_keys("123",Keys.RETURN)

窗体相关方法:

导航网页 位置

driver.get("http://www.example.com") 进入某一网页

driver.forward() 前进

driver.back() 后退

execute_script(script*args)  在当前窗口执行js 代码 (js代码自己写)

driver.execute_script("window.scrollTo(arguments[0], arguments[1]);",50,500) 传参使用内部的arguments列表

driver.create_web_element(element_id)  使用指定的元素id创建一个web元素

driver.fullscreen_window()   调用窗口管理器特定的“全屏”操作

driver.page_source 整个页面的HTML代码 当前打开的页面

driver.title 网页的标题<title>标签中的文字

get_screenshot_as_base64()

获取当前窗口的屏幕截图,作为base64编码的字符串

这对于嵌入在HTML中的嵌入图像很有用

get_screenshot_as_file(filename) save_screenshot(filename) 两方法等同

driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
将当前窗口的屏幕截图保存到PNG图像文件中。返回
如果有任何的IOError,则返回True。在文件名中使用完整路径。

get_screenshot_as_png()

将当前窗口的屏幕截图作为二进制数据。

get_window_position(windowHandle='current')

得到当前窗口x y 的位置

driver.get_window_position() 默认可以不写

get_window_rect()

得到窗口的x,y坐标,以及当前窗口的高度和宽度。

get_window_size(windowHandle='current')

得到当前窗口的高度和宽度

implicitly_wait(time_to_wait)

设置一个隐式的等待超时,当元素找到就往下执行,否则超过时间就报异常

driver.implicitly_wait(30) second

quit()

退出驱动程序并关闭所有相关的窗口

close()

关闭当前窗口

refresh()

刷新当前网页.

minimize_window()

调用窗口管理器特定的“最小化”操作

maximize_window()

最大化当前使用窗口

set_page_load_timeout(time_to_wait)

设置等待页面加载完成所需的时间 超时抛异常

set_script_timeout(time_to_wait)

设置脚本在一个时间内等待的时间,在抛出错误之前执行executeasyncscript调用

driver.current_url 正在加载页面的URL(driver相当于窗口)

current_window_handle

返回当前窗口的句柄

driver.name 返回低层调用浏览器名字

window_handles

在当前会话中返回所有窗口的句柄。

元素相关操作:

elem = driver.find_element_by_id("btn_id")

clear()

elem.clear()
如果是文本输入元素,就清除文本

click()

点击元素

send_keys(*value)

模拟输入元素 使用此方法发送简单的关键事件或填写表单字段

submit()

提交表单

get_attribute(name)
获得元素的属性,不存在时返回None
elem.get_attribute("class")

get_property(name)

获得元素的属性
elem.get_property("text_length")

value_of_css_property(property_name)
获取CSS属性

text

返回元素的文本

is_displayed()

判断该元素是否对用户可见

is_enabled()
判断是否使用了该元素

is_selected()

判断元素是否被选择,用于选框

screenshot(filename)

将当前元素的屏幕截图保存到PNG图像文件中。返回
如果有任何的IOError,则返回True。在文件名中使用完整路径
element.screenshot(‘/Screenshots/foo.png’)

id

elem.id 获取的不是属性ID, 是存储位置

location_once_scrolled_into_view
这种性质可能在没有任何警告的情况下发生变化。使用这个来发现屏幕上的元素是什么,
这样我们就可以点击它了。这个方法应该使元素被滚动到视图中。

rect

返回元素大小和位置的字典

 

弹出框:

from selenium.webdriver.common.alert import Alert

创建alert对象:alert = Alert(driver)

或者alert = driver.switch_to_alert()   不推荐使用这种方法

Alert(driver).accept() 同意

常用方法:直接用对象调用以下方法
accept() 同意弹出框

authenticate(username, password)

将用户名/密码发送到经过身份验证的对话框(如基本的HTTP身份验证)。隐式地“单击ok”

driver.switch_to.alert.authenticate(‘cheese’, ‘secretGouda’)

dismiss()

不同意

send_keys(keysToSend)

向弹出框发送text

text属性 获取弹出框的文本

alert_text = Alert(driver).text

Cookies:

设置cookie

# Now set the cookie. This one's valid for the entire domain
cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}
driver.add_cookie(cookie)
获取cookie
# And now output all the available cookies for the current URL
driver.get_cookies()  获取所有的cookie

get_cookie(name)   根据cookie名获取指定的cookie

delete_all_cookies()     删除所有的cookie

delete_cookie(name)   根据cookie名删除指定的cookie

 

设置等待页面加载时间:

通过time模板设置sleep时间,不能确定是否加载
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

try:

element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()

在抛出TimeoutException之前,它等待10秒,除非它在10秒内找到返回的元素。

常用的场景:selenium中提供的场景

title_is

title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

wait = WebDriverWait(driver, 10) 固定等待时间

element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

隐式等待告诉WebDriver在尝试查找任何元素(或元素)不立即可用时,在一定的时间内对DOM进行轮询。
默认设置为0。一旦设置好了,就为WebDriver对象的生命设置了隐式等待

driver.implicitly_wait(10) # seconds

当前页面任何元素不可用,都等待。等待时间不确定,并不是等待设置时间,当查询的元素可用,程序既向下走

myDynamicElement = driver.find_element_by_id("myDynamicElement")

 

动作链相关对鼠标的操作:

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)

actions.move_to_element(menu) 鼠标移动到元素
actions.click(hidden_submenu) 鼠标点击(点击前可以不需要移动到元素)
actions.perform() 执行以上操作  使用动作链操作最后都必须选择执行才生效

ActionChains(driver).move_to_element(elem).click(elem).perform()上面三句可以连着写

常见操作:

click(on_element=None)
如果元素存在,点击元素。如果不存在点击鼠标当前位置

click_and_hold(on_element=None)

在一个元素上按下鼠标左键。素。如果不存在在鼠标当前位置点击鼠标右键

context_click(on_element=None)

在元素上执行上下文单击(右键单击)

double_click(on_element=None)

双击一个元素

drag_and_drop(source, target) 拖拽一个元素到另一个位置

在源元素上保留鼠标左键,
然后移动到目标元素并释放鼠标按钮

drag_and_drop_by_offset(source, xoffset, yoffset)

在源元素上保留鼠标左键,
然后移动到目标偏移量并释放鼠标按钮

key_down(value, element=None)

只发送一个键盘按键,而不释放它。仅被用于修饰符键(Ctrl、Alt和Shift键 enter等)。

value来源于键盘 通过Key类来发送

element存在时,通过元素send keys,不存在发送keys到焦点元素

key_up(value, element=None)

释放一个修饰符的键

这两个一起用如按 ctrl+c

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

ActionChains(driver).key_down(Keys.ENTER).key_up(Keys.ENTER).perform() 通过鼠标输入enter键

move_by_offset(xoffset, yoffset)

根据当前鼠标位置偏移

move_to_element(to_element)

移动鼠标到元素上

move_to_element_with_offset(to_element, xoffset, yoffset)

将鼠标移动到指定元素的偏移量。
偏移量是相对于元素的左上角的

pause(seconds)
暂停

perform()

执行所有存储操作

release(on_element=None)

在元素上释放一个鼠标按钮

reset_actions()

清除已经存储在远程终端上的操作

send_keys(*keys_to_send)

将键发送到当前焦点元素
参数使用Key类中的属性

send_keys_to_element(element, *keys_to_send)

像元素发送键

UI支持:

from selenium.webdriver.support.select import Select

只作用select标签

select = Select(select_element)

deselect_all()

清除所有选中的条目 取消勾选

deselect_by_index(index)

通过索引清除

deselect_by_value(value)

通过option的value来清除
<option value=”foo”>Bar</option>

deselect_by_visible_text(text)

<option value=”foo”>Bar</option>
通过text来取消勾选

select_by_index(index)

通过索引选择

select_by_value(value)

select_by_visible_text(text)

all_selected_options

返回所有选中的option列表

first_selected_option

返回第一个被选中的option

options

返回select下所有的option标签列表

期待事件 多用在assert中:

import selenium.webdriver.support.expected_conditions

selenium.webdriver.support.expected_conditions.element_to_be_clickable(locator)

判断页面是否有元素可点击
locator is a tuple of (by, path)

selenium.webdriver.support.expected_conditions.element_to_be_selected(element)

判断元素是否被选择

selenium.webdriver.support.expected_conditions.alert_is_present

期待弹出框出现

selenium.webdriver.support.expected_conditions.title_contains(title)
判断标题包括

selenium.webdriver.support.expected_conditions.url_changes(url)

判断URL改变

selenium.webdriver.support.expected_conditions.url_matches(pattern)

判断URL是否匹配 pattern期待的URL 和当前URL对比

 

转载于:https://www.cnblogs.com/mayyan/p/7998473.html

你可能感兴趣的文章
jquery拖拽实现UI设计组件
查看>>
javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...
查看>>
白话排序算法--冒泡排序
查看>>
imx6 18bit display
查看>>
Spring静态属性注入
查看>>
实验10:指针2
查看>>
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>
使用ehcache-spring-annotations开启ehcache的注解功能
查看>>
Charles设置HTTPS抓包
查看>>