ʕ·͡ˑ·ཻʔ Daisy 🐾 ◟̆◞̆♥︎
Zou-Wang
点击头像关注

三っ•̀.̫•́)っ 我去宇宙了 ⁽⁽ଘ( ˊᵕˋ )ଓ⁾⁾

selenium库的使用

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对象

    查找多个元素:将其中的element加上一个s,则是对应的多个查找方法

Driver获取截屏

  • get_screenshot_as_base64():获取当前窗口的截图保存为一个base64编码的字符串

  • get_screenshot_as_file(filename):获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾

  • get_screenshot_as_png():获取当前窗口的截图保存为一个png格式的二进制字符串

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():单击对象

  • get_attribute(name):优先返回完全匹配属性名的值,如果不存在则返回属性名中包含name的值

  • screenshot(filename):获取当前元素的截图,保存为png,最好用绝对路径

  • send_keys(value):给对象元素输入数据

  • submit():提交表单

webelement常用属性

  • text:获取当前元素的文本内容

  • tag_name:获取当前元素的标签名

  • size:获取当前元素的大小

  • screenshot_as_png:将当前元素截屏并保存为png格式的二进制数据

  • screenshot_as_base64:将当前元素截屏并保存为base64编码的字符串

  • rect:获取一个包含当前元素大小和位置的字典

  • 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‘

posted @ 2020-01-03 20:57  没忘  阅读(431)  评论(0编辑  收藏  举报