导图社区 selenium-webdriver
相关的详细介绍,爬虫相关,归档的一些东西
编辑于2019-07-12 10:35:28webdriver
模拟用户操作
子主题
显示标签的type属性
label.get_attribute("type")
获取标签名字
label.tag_name()
label.size
label.id
窗口最大化
chrome_obj.maximize_window()
print "设置浏览器宽480、高800显示"
browser.set_window_size(480, 800)
模拟a标签 点击事件
label.click()
模拟input框 输入内容
label.send_keys("模拟搜索内容")
清除input标签中 输入的内容
label.clear()
模拟浏览器 返回上一个浏览页面
chrome_obj.back()
返回(后退)
browser.back()
switch_to_frame()
切换嵌套的框架
switch_to_window()
切换嵌套的窗口
implicitly_wait()
智能等待
ActionChains
介绍
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains
首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。
selenium.webdriver.common.action_chains.ActionChains(driver)
menu = driver.find_element_by_css_selector(".nav") hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") ActionChains(driver).move_to_element(menu).click(hidden_submenu).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) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
模拟鼠标操作
导入模块
from selenium.webdriver.common.action_chains import ActionChains
label = chrome_obj.find_element_by_link_text("点我 悬浮 显示其他 a标签")
模拟用户悬浮
ActionChains(chrome_obj).move_to_element(label).perform()
ActionChains(chrome_obj) 用于生成模拟用户行为 ;
perform() 执行存储行为
label_bel = chrome_obj.find_element_by_link_text("我是 a标签,点我页面跳转")
模拟用户点击
label_bel.click()
隐藏起来的,是无法用click()属性点击的。
先模拟点击下拉菜单,
其他鼠标操作
label.countext_lick() # 右击
label.double_click() # 双击
label.drag_and_drop() # 拖动
action.drag_and_drop(dragger, item1).perform() # 1.移动dragger到目标item1
action.click_and_hold(dragger).release(item2).perform() # 2.效果与上句相同,也能起到移动效果
action.click_and_hold(dragger).move_to_element(item3).release().perform() # 3.效果与上两句相
label.move_to_element(driver) # 悬浮
label.click_and_hold # 按鼠标左键一直不动
from selenium.webdriver import ActionChains
perform(): 执行所有 ActionChains 中存储的行为;
ActionChains(driver)
调用 ActionChains()类, 将浏览器驱动 driver 作为参数传入。
move_to_element(above)
context_click()方法用于模拟鼠标右键操作, 在调用时需要指定元素定位。
模拟键盘
from selenium.webdriver.common.keys import Keys # 引入模块
>>> label.send_keys("input输入的内容")
>>> label.send_keys(Keys.BACK_SPANCE) # 退格键
>>>label.send_keys(Keys.CONTRL,'a') # 全选
>>>label.send_keys(Keys.CONTRL,'v') # 粘贴
>>>label.send_keys(Keys.CONTRL,'c') # 复制
>>>label.send_keys(Keys.CONTRL,'x‘’) # 剪切
>>>label.send_keys(Keys.ENTER) # 回车
WebElement的方法:
id_
#当前元素的ID
tag_name
#获取元素标签名的属性
text
#获取该元素的文本。
click()
#单击(点击)元素
submit()
#提交表单
clear()
#清除一个文本输入元素的文本
get_attribute(name)
#获得属性值
s_selected(self)
#元素是否被选择
Whether the element is selected.
is_enabled()
#元素是否被启用
send_keys(*value)
#模拟输入元素
实例
# 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之 inputs = dr.find_elements_by_tag_name('input') for input in inputs: if input.get_attribute('type') == 'radio': input.click()
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]') for checkbox in checkboxes: checkbox.click()
# 把页面上最后1个checkbox的勾给去掉 dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
#在父亲元件下找到link为Action的子元素 menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠标定位到子元素上 webdriver.ActionChains(dr).move_to_element(menu).perform()
调用JS方法
execute_script(script, *args)
driver.execute_script(‘document.title’)
在当前窗口/框架 同步执行javaScript
cookies
driver.get_cookies() 获得cookie信息
get_cookie(name): 返回字典的key为“name”的cookie信息。
add_cookie(cookie_dict) 向cookie添加会话信息
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
delete_cookie(name) 删除特定(部分)的cookie
driver.delete_cookie("CookieName")
delete_all_cookies() 删除所有cookie
driver.delete_all_cookies()
元素等待
显式等待
WebDriverWait
WebDriverWait()一般由until()或until_not()方法配合使用
until(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为True。
常用的判断条件:
until_not(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False。
TimeoutException
最大时长时,异常
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
element = WebDriverWait(driver, 5, 0.5).until( EC.presence_of_element_located((By.ID, "kw")) )
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
隐式等待
implicitly_wait()
driver.implicitly_wait(10)
设置隐式等待为10秒
应用
导入模块
from selenium import webdriver
打开浏览器
chrome_obj = webdriver.Chrome()
打开网址
chrome_obj.get("https://www.baidu.com")
打开本地html页面
chrome_obj.get(r"C:\desktop\text.html")
获取标题
chrome_obj.title
获取打开网址的 url<br><br>
chrome_obj.current_url
· click 点击对象
browser.find_element_by_id("su").click()
· send_keys 在对象上模拟按键输入
browser.find_element_by_id("kw").send_keys("selenium")
· clear 清除对象的内容,如果可以的话
browser.find_element_by_id("kw").clear()
关闭浏览器窗口
chrome_obj.close()
· submit 提交表单
driver.find_element_by_id("su").submit()
· text 获取该元素的文本
data=driver.find_element_by_id("cp").text
· get_attribute 获得属性值
option.get_attribute("value")
is_displayed()
设置该元素是否用户可见。
如果可见则返回 True, 否则返回 False。
size
返回元素的尺寸。
上传文件
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
driver.get_screenshot_as_file("D:\\baidu_img.jpg")
截取当前窗口,并指定截图图片的保存位置
子主题
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。
is_displayed()
该元素是否用户可以见
move_to_element(menu)
隐藏起来的,是无法用click()属性点击的。
移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素
定位标签
普通
# 查找标签
label = chrome_obj.find_element_by_id("kw")
label = chrome_obj.find_element_by_name("wd")
label = chrome_obj.find_element_by_class_name("s_ipt")
label = chrome_obj.find_element_by_tag_name("imput")
label = chrome_obj.find_element_by_link_text("a标签中的内容 准确定位")
label = chrome_obj.find_element_by_partial_link_text("a标签中的内容 模糊定位 ")
label = chrome_obj.find_element_by_xpath(“放入 copy 标签中的常css路径”)
label = chrome_obj.find_element_by_css_selector(“input=[id='id_name'/name='name_name'/……/]")
title_is 标题是某内容 title_contains 标题包含某内容 presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p') 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 frame加载并切换 invisibility_of_element_located 元素不可见 element_to_be_clickable 元素可点击 staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新 element_to_be_selected 元素可选择,传元素对象 element_located_to_be_selected 元素可选择,传入定位元组 element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False alert_is_present 是否出现Alert