ghost.py使用
来源:互联网 发布:新手美工 编辑:程序博客网 时间:2024/04/30 07:32
Python中ghost的使用,有需要的朋友可以参考下。
ghost.py
ghost.py is a webkit web client written in python.
from ghost import Ghostghost = Ghost()page, extra_resources = ghost.open("http://jeanphi.fr")assert page.http_status==200 and 'jeanphix'in ghost.content
InstallationFirst you need to install eitherPyQtorPySidethat are availables for many platforms.
Then you may install ghost.py using pip:
pip install Ghost.pyBrowsing Quick start
First of all, you need a instance of Ghost web client:
from ghost import Ghostghost = Ghost()
Open a web pageGhost provide a method that open web page the following way:
page, resources = ghost.open('http://my.web.page')
This method returns a tuple of main resource (web page) and all loaded resources (such as CSS files, javascripts, images...).
All those resources are backed as HttpResource objects.
At the moment Httpresource objects provide the following attributes:
- url: The resource url.
- http_status: The HTTP response status code.
- headers: The response headers as a dict.
Executing javascripts inside webkit frame is one of the most interesting features provided by Ghost:
result, resources = ghost.evaluate( "document.getElementById('my-input').getAttribute('value');")
The return value is a tuple of:
- last javascript last statement result.
- loaded resources (e.g.: when an XHR is fired up).
As many other Ghost methods, you can pass an extra parameter that tells Ghost you expect a page loading:
page, resources = ghost.evaluate( "document.getElementById('link').click();", expect_loading=True)
Then the result tuple wil be the same as the one returned by Ghost.open().
Play with forms Fill a fieldYou can set a form field value trougth Ghost.set_field_value(selector, value, blur=True, expect_loading=False):
result, resources = ghost.set_field_value("input[name=username]","jeanphix")
If you set optional parameter `blur` to False, the focus will be left on the field (usefull for autocomplete tests).
For filling file input field, simply pass file path as `value`.
Fill an entire formYou can fill entire form trougth Ghost.fill(selector, values, expect_loading=False):
result, resources = ghost.fill("form", { "username": "jeanphix", "password": "mypassword"})
Submit the formYon can submit the form by firing `submit` event:
page, resources = ghost.fire_on("form", "submit", expect_loading=True)
WaitersGhost provides several methods for waiting for specific things before the script continue execution:
wait_for_alert()That wait until a javascript alert() is send.
result, resources = ghost.wait_for_alert()
wait_for_page_loaded()That wait until a new page is loaded.
page, resources = ghost.wait_for_page_loaded()
wait_for_selector(selector)That wait until a element match the given selector.
result, resources = ghost.wait_for_selector("ul.results")
wait_for_text(text)That wait until the given text exists inside the frame.
result, resources = ghost.wait_for_selector("My result")
ConfirmAccept or deny javascript confirm is quite easy:
with Ghost.confirm(): # The confirm() box fired up by click will be accepted self.ghost.click('#confirm-button')with Ghost.confirm(False): # The confirm() box fired up by click will be deniedself.ghost.click('#confirm-button')
PromptFilling a value in prompt box:
with Ghost.prompt('my value'): # prompt() box fired up by click will be filled with 'my value' self.ghost.click('#prompt-button')
Capture viewportGhost.capture_to(path, region=None, selector=None) method let's you take webkit current frame screenshots.
If you need to capture a specific region of the viewport, just provide a selector (or coordinates tuple) that feets your needs:
ghost.capture_to('header.png', selector="header")
Test client WSGI appsRequirements:
pip install tornado
ghost.py provides a simple GhostTestCase that deals with WSGI applications:
import unittestfrom flask import Flaskfrom ghost import GhostTestCaseapp = Flask(__name__)@app.route('/')def home(): return 'hello world'classMyTest(GhostTestCase): port = 5000 @classmethod def create_app(cls): returnapp def test_open_home(self): self.ghost.open("http://localhost:%s/" % self.port) self.assertEqual(self.ghost.content, 'hello world')if __name__ == '__main__': unittest.main()
Debug your testTests can be run with a UI by setting display class member to True:
class MyTest(GhostTestCase): display = True
Sample use caseThe following test tries to centerhttp://www.openstreetmap.org/map to France:
# Opens the web pageghost.open('http://www.openstreetmap.org/')# Waits for form search fieldghost.wait_for_selector('input[name=query]')# Fills the formghost.fill("#search_form", {'query': 'France'})# Submits the formghost.fire_on("#search_form", "submit")# Waits for results (an XHR has been called here)ghost.wait_for_selector( '#search_osm_nominatim .search_results_entry a')# Clicks first result linkghost.click('#search_osm_nominatim .search_results_entry:first-child a')# Checks if map has moved to expected latitudelat, resources = ghost.evaluate("map.center.lat")assert float(lat.toString()) == 5860090.806537
DjangoGhost provides an extension for django built on to of the upcomingLiveServerTestCase.
from ghost.ext.django.test import GhostTestCase
- ghost.py使用
- ghost.py 使用实例
- Ghost使用
- ghost使用
- GHOST使用
- [Python] Ghost.py 模擬瀏覽器執行 JavaScript 安裝筆記
- centos 安装 Qt PyQt ghost.py 注意事项
- Ghost 8.2 +GHOST使用教程(图+文)
- Ghost 使用详解
- Ghost 使用详解
- Norton Ghost使用详解
- Ghost使用详解
- GHOST使用参数
- Ghost使用教程
- Ghost 使用详解
- Ghost 使用详解
- GHOST使用教程(图解)
- Ghost使用教程
- windows环境phpstorm调试环境搭建
- App开发日报 2015-05-17 Awesome-MaterialDesign更新
- SQL
- Axis2与Spring的集成
- 第九题
- ghost.py使用
- 《APUE》笔记--第一章
- 第十题
- 《管理概论》第二周 课堂笔记与学习心得
- MATLAB数学建模资料
- Spark(七) -- Scala快速入门
- Servlet自学第19讲:sendRedirect(重定向)与forworld(转发)区别
- selenium + python之元素定位
- 如何判断一个计算机系统的右移是“逻辑右移”,还是“算术右移”?