Selenium
Selenium是一个用于web应用测试的工具,Selenium测试直接运行在浏览器中,模拟用户操作
安装:
pip install selenium(win)
配置:
将下载的ChromeDriver进行解压,将解压后的文件放入合适的位置(将解压的文件放入配置了环境变量的文件夹
Chrome有界面运行
from selenium import werdriver
import time
driver = wedriver.Chrome() ##创建Chrome对象
#操作
driver.get('https://www.baidu.com')
time.sleep(2)
driver.quit() ##关闭浏览器
chrome无界面运行
rom selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
chrome_opt = Options() # 创建参数设置对象.
chrome_opt.add_argument('--headless') # 无界面化.
chrome_opt.add_argument('--disable-gpu') # 配合上面的无界面化.
chrome_opt.add_argument('--window-size=1366,768') # 设置窗口大小, 窗口大小会有影响.
# 创建Chrome对象并传入设置信息.
driver = webdriver.Chrome(chrome_options=chrome_opt)
# 操作这个对象.
driver.get('https://www.baidu.com') # get方式访问百度.
time.sleep(2)
print(driver.page_source) # 打印加载的page code, 证明(prove) program is right.
driver.quit() # 使用完, 记得关闭浏览器, 不然chromedriver.exe进程为一直在内存中.
Selenium Driver操作
- get(url) :在当前浏览器会话中访问传入的URL地址
- close():关闭浏览器当前窗口
- quit():退出webdriver并关闭所有窗口
- refresh():刷新当前页面
- title:获取当前页的标题
- page_source:获取当前页渲染后的源代码
- current_url:获取当前页面的url
- window_handles:获取当前会话中所有窗口的句柄
Driver查找单个元素
find_element_by_xpath():通过xpath查找
find_element_by_class_name():通过class属性查找
find_element_by_css_selector():通过css选择器查找
find_element_by_id():通过id查找
find_element_by_name():通过name属性进行查找
find_element_by_partial_link_text():通过链接文本的部分匹配查找
find_element_by_tag_name():通过标签名查找
查找返回的是一个webelement对象
Driver获取截屏
Driver获取窗口信息
get_window_position(windowHandle='current') :获取当前窗口的x,y坐标
get_window_rect():获取当前窗口的x,y坐标和当前窗口的高度和宽度
get_window_size(windowHandle='current'):获取当前窗口的高度和宽度
Driver切换操作
- switch_to_frame(frame_reference):将焦点切换到指定的子框架中
- switch_to_window(window_name):切换窗口
Driver执行js代码
execute_async_script(script,*args):在当前的window/frame中异步执行js代码
script:是你要执行的js代码
*args:是你的js代码执行要传入的参数
number = 10
for line in range(10):
# 模拟滚轮操作
js_code = '''
window.scrollTo(0, %s)
''' % number
# execute_script: 该方法可以执行js代码
driver.execute_script(js_code)
time.sleep(0.5)
number += 500
- excute_script(script,*arges):在当前的window/frame中同步执行js代码
Selenium Webelement操作
clear() :清空对象中的内容
click():单击对象
send_keys(value):给对象元素输入数据
submit():提交表单
webelement常用属性
size:获取当前元素的大小
screenshot_as_png:将当前元素截屏并保存为png格式的二进制数据
screenshot_as_base64:将当前元素截屏并保存为base64编码的字符串
parent:获取当前元素的父节点
location:当前元素的位置
id:当前元素的id值
Action-Chains方法
动作链:调用动作链类可以得到一个对象,对象中有方法可以帮你做,拖拽图片等操作
click:左键单击
context_click:右键单击
double_click:双击
click_and_hold:点击并抓起
drag_and_drop(source,target):在source元素上点击抓起,移动到target元素上松开放下
drag_and_drop_by_offset(source,xoffset,yoffset):在source元素上点击抓起,移动到相对source元素偏移xoffset和yoffset的坐标位置放下
send_keys(*keys_to_send):将键发送到当前聚焦的元素
send_keys_to_element(element.*keys_to_send):将键发送到指定的元素
reset_actions():清除已经存储的动作
driver = webdriver.Chrome() try: driver.get('http://www.runoob.com/try/try.PHP?filename=jqueryui-api-droppable') driver.implicitly_wait(3) # 使用隐式等待 # 切换到 id为iframeResult 的 iframe标签页面中 driver.switch_to.frame('iframeResult') # 需要拖动图片块的 源位置 source = driver.find_element_by_id('draggable') print(source.location) # 根据id为droppable 属性查找目标快 标签对象 target = driver.find_element_by_id('droppable') # 滑块的距离 distance = target.location.get('x') - source.location.get('x') # 注意: 只要是 ActionChains(driver)调用的方法,都需要调用 perform方法来执行 # 先点击鼠标,按住拖拽的标签 ActionChains(driver).click_and_hold(source).perform() number = 0 while number < distance: # 循环滑动,每次滑动3 每次移动3格 ActionChains(driver).move_by_offset(xoffset=3,yoffset=0).perform() number += 3 # 移动完毕后,必须释放 ActionChains(driver).release().perform() time.sleep(100) finally: driver.close()
Selenium Wait
显示等待
from selenium import wdbdriver from selenium.wedbriver.common.by import By from selenium.webdriver.support.ui import webdriverwait from selenium.wedbriver.support import expected_conditions as ES driver = webdriver.Chrome() driver.get(网址) try: element =webdriverwait(driver,10).until( EC.presence_of_element_located((By.ID,"myDynamicElement"))) finally: driver.quit()
隐式等待:在webdriver中进行find_element这类查找操作时,如果找不到元素,则会默认的轮询等待一段时间
from selenium import wedbriver driver =webdriver.Chrome() driver.implicitly_wait(10) driver.get('网址')
Driver操作Cookie
add_cookie(cookie_dict):给当前会话添加一个cookie
cookie_dict:一个字典对象,必须要有"name"和value两个键,可选的键有:'path'、‘domain
、’secure‘、’expiry‘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。