Selenium是一个用于web应用测试的工具,Selenium测试直接运行在浏览器中,模拟用户操作
安装:
pip install selenium(win)
配置:
将下载的ChromeDriver进行解压,将解压后的文件放入合适的位置(将解压的文件放入配置了环境变量的文件夹
from selenium import werdriver
import time
driver = wedriver.Chrome() ##创建Chrome对象
#操作
driver.get('https://www.baidu.com')
time.sleep(2)
driver.quit() ##关闭浏览器
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进程为一直在内存中.
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对象
查找多个元素:将其中的element加上一个s,则是对应的多个查找方法
get_screenshot_as_base64():获取当前窗口的截图保存为一个base64编码的字符串
get_screenshot_as_file(filename):获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾
get_screenshot_as_png():获取当前窗口的截图保存为一个png格式的二进制字符串
get_window_position(windowHandle=‘current‘) :获取当前窗口的x,y坐标
get_window_rect():获取当前窗口的x,y坐标和当前窗口的高度和宽度
get_window_size(windowHandle=‘current‘):获取当前窗口的高度和宽度
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
clear() :清空对象中的内容
click():单击对象
get_attribute(name):优先返回完全匹配属性名的值,如果不存在则返回属性名中包含name的值
screenshot(filename):获取当前元素的截图,保存为png,最好用绝对路径
send_keys(value):给对象元素输入数据
submit():提交表单
text:获取当前元素的文本内容
tag_name:获取当前元素的标签名
size:获取当前元素的大小
screenshot_as_png:将当前元素截屏并保存为png格式的二进制数据
screenshot_as_base64:将当前元素截屏并保存为base64编码的字符串
rect:获取一个包含当前元素大小和位置的字典
parent:获取当前元素的父节点
location:当前元素的位置
id:当前元素的id值
动作链:调用动作链类可以得到一个对象,对象中有方法可以帮你做,拖拽图片等操作
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()
显示等待
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('网址')
add_cookie(cookie_dict):给当前会话添加一个cookie
cookie_dict:一个字典对象,必须要有"name"和value两个键,可选的键有:‘path‘、‘domain
、’secure‘、’expiry‘
原文:https://www.cnblogs.com/lzss/p/12146925.html