Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放

1. 操作Cookie

有时候我们想要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

WebDriver操作cookie的方法:

get_cookies():获得所有cookie信息

ge_cookie(name):返回字典的key为“name”的cookie信息

add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值

delete_cookie(name,optionsString):删除cookie信息。“name” 是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”

delete_all_cookies():删除所有信息

下面通过get_cookies()来换取当前浏览器的cookie信息。

from selenium import webdriver

wd = webdriver.Chrome()

wd.get(‘http://youdao.com‘)

#获得cookie信息
cookies = wd.get_cookies()
#将获得cookie的信息打印
print(cookies)

输出结果:

从执行结果可以看出,cookie数据是以字典的形式进行采访的。知道了cookie的存放形式,接下来我们就可以按照这种形式向浏览器中写入cookie信息。

from selenium import webdriver

wd = webdriver.Chrome()

wd.get(‘http://youdao.com‘)

#向cookie的name和value中添加会话信息
wd.add_cookie({‘name‘:‘xhh‘,‘value‘:‘xiaohuihui‘})

#遍历cookies中的name和value信息并打印
for cookie in wd.get_cookies():
    print("%s -> %s" % (cookie[‘name‘],cookie[‘value‘])) 

输出结果:

从执行结果可以看到,第四条cookie信息是在脚本执行过程中通过add_cookie()方法添加的。通过遍历得到所有的cookie信息,从而找到key为“name”和“value”的特定cookie的value。

name在上面情况下会用到cookie的操作呢?例如开发人员开发一个姑娘,当用户登录后,会将用户的用户名写入浏览器cookie,指定的key为“username”,name我们就可以通过get_cookies()找到username,打印value。如果找不到username或对应的value为空,那么说明cookie没有成功的保存到浏览器中。

delete_cookie()和 delete_all_cookies()的使用也很简单,前者通过name删除一个特定的cookie信息,后者直接删除浏览器中所有的cookies()信息。

2. 调用JavaScript

虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

一般我们想到的必须使用滚动条的场景是:注册时的法律条文的阅读。判断用户是否阅读完的标志是:滚动条是否拉倒页面底部。当然,有时候为了使操作更接近用户行为也会使用滚动条,例如用户要操作的元素在页面的第二屏,一般用户不会对看不到的元素进行操作,那么就需要先将滚动条拖动到页面的第二屏再进行操作。

用于调整浏览器滚动条位置的JavaScript代码如下:

<!-- window.scrollTo(左边距,上边距); -->
window.scrollTo(0,500);

window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。

代码如下:

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get(‘http://www.baidu.com‘)

#设置浏览器窗口大小
wd.set_window_size(600,600)

#搜索
wd.find_element_by_id("kw").send_keys("selenium")
wd.find_element_by_id("su").click()

sleep(2)

#通过JavaScript设置浏览器窗口的滚动条位置
js = "window.scrollTo(100,450)"
wd.execute_script(js)

通过浏览器打开百度进行搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过execute_script()方法执行JavaScript代码来移动滚动条的位置。

除此之外,我们还可以做到让滑动条动态移动,代码如下:

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get(‘https://www.taobao.com/‘)
sd = 0
for i in range(1,50):
    sd += 100
    js = "var q=document.documentElement.scrollTop=%s"%(sd)
    wd.execute_script(js)
    sleep(0.5)

做的比较简单,大家可以修改下,做的更加完美,只要控制参数就能上下移动。

左右移动就需要调用方法:

scrollLeft:滚动条向右移动

当然JavaScript的作用不仅仅体现在浏览器滚动条的操作上 ,还可以用它向页面中的textarea文本框输入内容。

html代码:

<textarea id="id" style="width: 98%;" cols="50" rows="5" class="txtarea">
</textarea>

虽然我们可以通过id的方式将其定位。但通过send_keys()向文本框中输入文本信息会出现一些不合理的情况,例如文本直接居中添加。这种情况下,就需要借助JavaScript代码完成输入。

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get(‘http://127.0.0.1:8020/day01/index.html‘)

text = "input text"
js = "var sum=document.getElementById(‘id‘);sum.value=‘"+text+"‘;"
wd.execute_script(js)

首先定义了要输入的内容text,然后将text与JavaScript代码通过“+”进行拼接。这样做的目的是为了使输入内容变得可自定义。最后,通过execute_script()执行JavaScript代码。

3. HTML5的视频播放

目前HTML5技术已经成为主流,目前主流的浏览器都已支持HTML5。越来越多的应用使用了HTML5元素,如canvas、video等,另外网页存储功能更增加了用户的网络体验,使得越来越多的开发者在使用这样的标准,所以我们也需要学习如何使用自动化技术来测试它们。

WebDriver支持在指定的浏览器上测试HTML5,另外,我们还可以使用JavaScript来测试这些功能,这样就可以在如何浏览器上测试HTML5了。

大多数浏览器使用控件(如Flash)来播放视频,但是不同的浏览器需要使用不同的插件。HTML5定义了一个新的元素<video>,指定了一个标准的方式来嵌入电影片段,IE9+、Firefox、Opera、Chrome都支持该元素。

案例:

from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wd = webdriver.Chrome()

wd.get(‘https://www.bilibili.com/video/av76611945‘)

video=WebDriverWait(wd,30,0.5).until(EC.presence_of_element_located((By.XPATH,"//div[@id=‘bilibiliPlayer‘]/div[1]/div[1]/div[9]/video")))  # 找到视频

#返回播放文件地址
url = wd.execute_script("return arguments[0].currentSrc;",video)
print(url)

#播放视频
print("start")
wd.execute_script("return arguments[0].play()",video)

time.sleep(15)

#暂停视频
print("stop")
wd.execute_script("arguments[0].pause()",video)

JavaScript函数有个内置的对象叫做arguments。argument对象包含了函数调用的参数数组,[0]表示取对象的第一个值。

currentSrc返回当前音频或视频的URL。如果未设置音频或视频,则返回空字符串。

load()、play()、pause()等控制着视频的加载、播放和暂停。

这样我们就实现了最基本的播放和暂停视频了,至于视频加速减速什么的,就要自己摸索了(因为我也不会,小声bb)。

原文地址:https://www.cnblogs.com/liuhui0308/p/11961428.html

时间: 2024-10-12 19:02:20

Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放的相关文章

Java Selenium (十二) 操作弹出窗口 &amp; 智能等待页面加载完成 &amp; 处理 Iframe 中的元素

一.操作弹出窗口   原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然后遍历, 使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口. 测试页面的HTML <html> <head> <title>常见web ui元素操作, 及API使用</title> <script type

java selenium (十二) 操作弹出窗口

selenium 中如何处理弹出窗口 阅读目录 原理 在代码里, 通过         Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄,   然后遍历,  使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口 测试页面的HTML <html> <head> <title>常见web ui元素操作, 及API使用</ti

JVM(十二):方法调用

JVM(十二):方法调用 在 JVM(七):JVM内存结构 中,我们说到了方法执行在何种内存结构上执行:Java 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们来看一下 方法是如何调用的. 方法调用 首先,我们要明白一个基础性概念:方法调用并不是方法执行.其只是确定该调用哪一个方法而已(多态的影响,选择方法的不同版本).并且因为 Java 调用的动态性,有些方法需要在类加载阶段动态解析,这也为 JVM 解析符号引用成直接引用提供了难度. 解析 在 JVM(

十二款很不错的Chrome Cookie管理插件,开发者必备之cookie插件

Cookie是开发者最常用的的功能了,本文介绍了Chrome商店中常用的一些cookie chrome插件,一共十二款chrome cookie插件,做一个图文集合,供开发者们参考学习,本站收集了全球所有的cookie开发者插件,中文翻译是由GOOGLE翻译完成的,请大家重点使用插件的下载功能,感谢! Cookie Killer for Facebook Chrome插件 保持Facebook的Facebook.com上.当你登出, Facebook的cookie被杀死,这样你,你遍历网页不被跟

如鹏网学习笔记(十二)HTML5

一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过时的和样式相关的HTML标签和属性 给网页带来了新的特性: 多媒体支持.本地存储.图形绘制和样式特效等 二.新的多媒体标签 1,<video> 用来在页面播放视频 部分属性: src 要播放的视频的地址 width 设置播放器的宽度,单位px height 设置播放器的高度,单位px contro

基础知识《十二》一篇文章理解Cookie和Session

理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 一.Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文

How Javascript works (Javascript工作原理) (十二) 网络层探秘及如何提高其性能和安全性

个人总结:阅读完这篇文章需要20分钟,这篇文章主要讲解了现代浏览器在网络层传输所用到的一些技术. 这是 JavaScript 工作原理的第十二章. 正如在之前关于渲染引擎的文章中所讲的那样,我们相信好的和伟大的 JavaScript 开发者之间的差别在于后者不仅仅只是理解了语言的具体细节还了解其内部构造和运行环境. 网络简史 49 年前,ARPAnet 诞生了.它是早期的报文分组交换网络及第一个实现 TCP/IP 协议套件的网络.该网络连通了加利福亚大堂和斯坦福研究所.20 年后,Tim Ber

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

Selenium3 + Python3自动化测试系列十——调用JavaScript代码

调用JavaScript代码 一.调用JavaScript代码方法 Selenium在对浏览器操作时会有自动化代码中不稳定的部分,经常出错的部分,可以将这部分对网页元素进行操作的代码换成对应的JavaScript脚本,由于浏览器原生的支持JavaScript,JavaScript代码直接在浏览器内核中执行,就不会出现元素不在所点击的位置等错误,可以大大提高自动化用例执行的稳定性和执行效率. 调用JavaScript方法有两种: 1.execute_script():此是同步方法,用它执行js代码