大数跨境
0
0

selenium中webdrive 的使用及操作(2)

selenium中webdrive 的使用及操作(2) 橙子好甜
2025-06-13
1
导读:上篇:selenium中webdrive 的使用及操作Cookie操作验证浏览器中是否存在某个 cookie,

上篇:selenium中webdrive 的使用及操作

Cookie操作

验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒和 

集成测试完成的。WebDriver 提供了操作 Cookie 的相关方法可以读取、添加和删除 cookie 信息。

webdriver 操作 cookie 的方法有: 

  • get_cookies() 

获得所有 cookie 信息 

  • get_cookie(name) 

返回有特定 name 值有 cookie 信息 

  • add_cookie(cookie_dict) 

添加 cookie,必须有 name 和 value 值 

  • delete_cookie(name) 

删除特定(部分)的 cookie 信息 

  • delete_all_cookies() 

删除所有 cookie 信息 

浏览器网址获取cookie 

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

from selenium import webdriverimport timedriver = webdriver.Chrome()# driver.get("http://www.youdao.com")driver.get("http://www.baidu.com")
# 获得 cookie 信息cookie= driver.get_cookies()#将获得 cookie 的信息打印print(cookie)driver.quit()

运行结果

[{'domain''.baidu.com''expiry'1781356021'httpOnly'False'name''ZFY''path''/''sameSite''None''secure'True'value''1KlAgFEu78DuZdTfptZs:BUsVWG2TG:BcRWMyScL5A4EY:C'}, {'domain''.baidu.com''expiry'1781356020'httpOnly'False'name''BAIDUID_BFESS''path''/''sameSite''None''secure'True'value''8833F81359A79BCA34FFAAC47A15F5C3:FG=1'}, {'domain''.baidu.com''expiry'1749906420'httpOnly'False'name''BA_HECTOR''path''/''sameSite''Lax''secure'False'value''0c2l2gag00a0a1cg0gaka12hak25a71k4o8jl25'}, {'domain''www.baidu.com''httpOnly'False'name''BD_HOME''path''/''sameSite''Lax''secure'False'value''1'}, {'domain''.baidu.com''expiry'1781356019'httpOnly'False'name''BAIDUID''path''/''sameSite''Lax''secure'False'value''8833F81359A79BCA34FFAAC47A15F5C3:FG=1'}, {'domain''www.baidu.com''expiry'1750684020'httpOnly'False'name''BD_UPN''path''/''sameSite''Lax''secure'False'value''12314753'}, {'domain''.baidu.com''expiry'1784380019'httpOnly'False'name''PSTM''path''/''sameSite''Lax''secure'False'value''1749820019'}, {'domain''.baidu.com''expiry'1784380019'httpOnly'False'name''BIDUPSID''path''/''sameSite''Lax''secure'False'value''8833F81359A79BCA9976A04759B8800D'}][Finished in 8.1s]

浏览器中写入 cookie 信息

from selenium import webdriverimport timedriver = webdriver.Chrome()# driver.get("http://www.youdao.com")driver.get("http://www.baidu.com")
#向 cookie 的 name 和 value 添加会话信息。driver.add_cookie({'name':'key-aaaaaaa''value':'value-bbbbbb'})#遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息for cookie in driver.get_cookies():    print("%s -> %s" % (cookie['name'], cookie['value']))driver.quit()

运行结果

ZFY -> mdTNCrMuKeGFf:BkPIkZ9UXiv4LSdXPqGDHxhLm1dR5Y:CBAIDUID_BFESS -> 50E8922778915E3D18D46FA502BC6A98:FG=1BA_HECTOR -> 298g21ah802gaheha1a40420a4a08l1k4o98q24BD_HOME -> 1BAIDUID -> 50E8922778915E3D18D46FA502BC6A98:FG=1BD_UPN -> 12314753key-aaaaaaa -> value-bbbbbbPSTM -> 1749820696BIDUPSID -> 50E8922778915E3D248551A7D6D165F7[Finished in 10.2s]

调用 JavaScript

webDiver 不能操作本地 Windows 控件,但对于浏览器上的控件也不是都可以操作的。比哪浏览器上 的滚动条,虽然 WebDriver 提供操作浏览器的前进和后退按钮,但对于滚动条并没有提供相应用的方法。 那么在这种情况下就可以借助 JavaScript 方法来控制浏览器滚动条。WebDriver 提供了 execute_script()方法 来执行 JavaScript 代码。 

一般用到操作滚动条的会两个场景: 注册时的法律条文的阅读,判断用户是否阅读完成的标准是:滚动条是否拉到最下方。 要操作的页面元素不在视觉范围,无法进行操作,需要拖动滚动条。 

用于标识滚动条位置的代码

html页面

<body onload"document.body.scrollTop=0 "><body onload"document.body.scrollTop=100000 ">

document.body.scrollTop 

网页被卷去的高。scrollTop 设置或获取滚动条与最顶端之间的距离。如果想让滚动条处于顶部,那么 可以设置 scrollTop 的值为 0,如果想让滚动条处于最底端,可以将这个值设置的足够大,大个窗口的高度 即可。scrollTop 的值以像素为单位

#coding=utf-8from selenium import webdriverimport time#访问百度driver=webdriver.Chrome()driver.get("http://www.baidu.com")#搜索driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("su").click()time.sleep(3)#将页面滚动条拖到底部js="var q=document.documentElement.scrollTop=10000"driver.execute_script(js)time.sleep(3)#将滚动条移动到页面的顶部js_="var q=document.documentElement.scrollTop=0"driver.execute_script(js_)time.sleep(3)driver.quit()

窗口截图 

自动化脚本是交给工具去执行,有时候打印的错误信息并不十分明确,如果在脚本执行出错的时候将 对当前窗口截图保存,那么通过图片信息会更只观帮助我们找到脚本出错的原因。Webdriver 提供了截图 函数 get_screenshot_as_file()来截取当前窗口。 

#coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://www.baidu.com')try:    driver.find_element_by_id('kw_error').send_key('selenium')    driver.find_element_by_id('su').click()except :    driver.get_screenshot_as_file("D:\\baidu_error.jpg")    driver.quit()

关闭窗口

在前页的例子中我们一直在使用 quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之 外 WebDriver 还提供了 close()方法,用于关闭当前窗口。当脚本在执行时打开了多个窗口,多窗口的处理,这个时候只能关闭其中的某一个窗口,这个时候就需要使用 close()来关闭。

from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()driver.implicitly_wait(10)driver.get("http://www.baidu.com")#获得百度搜索窗口句柄sreach_windows= driver.current_window_handledriver.find_element_by_link_text(u'登录').click()driver.find_element_by_link_text(u"立即注册").click()#获得当前所有打开的窗口的句柄all_handles = driver.window_handles#进入注册窗口sleep(2)for handle in all_handles:    if handle != sreach_windows:        driver.switch_to_window(handle)        print'now register window!')driver.close()driver.quit()

验证码处理

验证码的常见处理方式有以下几种。 

去掉验证码 

这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境, 这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险。 

设置万能码 

去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码, 而是程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为 验证通过,否则按照原先的验证方式进行验证。 设计万能码的方式非常简单,只对于用户的输入信息多加一个逻辑判断,如下面的小例子

验证码识别技术

Python-tesseract 来识别图片验证码,但是针对复杂的识别,识别错误率高。

【声明】内容源于网络
0
0
橙子好甜
人生苦短,我用python --it测试狗
内容 30
粉丝 0
橙子好甜 人生苦短,我用python --it测试狗
总阅读32
粉丝0
内容30