js 控制
webdriver可以用来执行javascript代码,相应的方法:execute_script
- 例
#coding=utf-8
import sys
from selenium import webdriver
import time
surl = 'http://www.baidu.com'
kw = sys.argv[1]
print kw
def search(keyword):
driver = webdriver.Firefox()
driver.get(surl)
driver.find_element_by_id('kw').send_keys(keyword)
driver.find_element_by_id('su').click()
return driver
def testjs():
driver = search(kw)
js1 = 'document.documentElement.scrollTop=10000'
js2 = 'document.documentElement.scrollTop=0'
driver.execute_script(js1)
time.sleep(3)
driver.execute_script(js2)
driver.quit()
if __name__ == "__main__":
testjs()
将代码保存为baiduscroll.py,在命令行中执行
python baiduscroll.py selenium查看执行结果
窗口截屏
相应方法get_screenshot_as_file()
同样的,我们直接在上一个文件中进行修改,将谁的重命名为sshot.py
#coding=utf-8
import sys
from selenium import webdriver
import time
surl = 'http://www.baidu.com'
kw = sys.argv[1]
print kw
def search(keyword):
driver = webdriver.Firefox()
driver.get(surl)
driver.find_element_by_id('kw').send_keys(keyword)
driver.find_element_by_id('su').click()
driver.get_screenshot_as_file('./shottest.jpg')
return driver
def testjs():
driver = search(kw)
js1 = 'document.documentElement.scrollTop=10000'
js2 = 'document.documentElement.scrollTop=0'
driver.execute_script(js1)
time.sleep(3)
driver.execute_script(js2)
driver.quit()
if __name__ == "__main__":
testjs()
执行后可以看到当前文件夹下多了一个shottest.jpg
shottest.jpg关闭窗口
相应方法quit(),这个我们在上面的脚本中已经应用过了
关于屏幕操作
set_window_size() 设置屏幕大小
maximize_window()全屏
back()后退
forward()前进
webdriver的设计原理
- WebDriver 是按照 server – client 的经典设计模式设计的。
server 端就是 remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是 remoteserver,它的职责就是等待 client 发送请求并做出相应。client 端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的 url 等操作是以 http 请求的方式发送给被 测试浏览器,也就是 remote server;remote server 接受请求,并执行相应操作,并在 response 中返回执行状态、返回值等信息。
webdriver工作流程
- webdriver启动目标浏览器,并绑定到指定端口,该启动的浏览器实例,做为webdriver的remoteserver。
- client端通过commandExcuter发送HTTPRequest经remoteserver的侦听端口(协议:the webdriver wire protocol)
- Remote server 需要依赖原生的浏览器组件(如:IEDriverServer.exe、chromedriver.exe),来转化转化浏览器的 native 调用。
网友评论