使用Spynner基於Webkit從最底層模擬瀏覽器行為


WebKit是開源的Web瀏覽器引擎,蘋果的Safari、谷歌的Chrome瀏覽器都是基於這個框架來開發的。WebKit 還支持移動設備和手機,包括iPhone和Android手機都是使用WebKit做為瀏覽器的核心。了解更多>>>

由於是直接使用瀏覽器引擎,所以能夠訪問和修改瀏覽器的各項底層屬性,能夠與其進行深度的交互。例如,可以進行代理設置、HTTP頭讀取和修改、Cookie讀取和設置、緩存控制、URL過濾。另外,Webkit方案還能夠跨平台使用。

Qt庫是一個跨平台C++圖形用戶界面應用程序開發框架,QtWebKit是Webkit在Qt庫中的封裝。

PyQt4是Qt庫的Python實現,我們可以直接使用PyQt4.QtWebKit來實現一個自定義功能的瀏覽器。

spynner是一個對PyQt4.QtWebKit 的封裝庫,使得QtWebKit更易於使用,該開源項目的位置在https://github.com/makinacorpus/spynner

spynner的例子可以參考https://github.com/makinacorpus/spynner/blob/master/src/spynner/tests/spynner.rst

 

Spynner is a stateful programmatic web browser module for Python. It is based upon PyQT and WebKit. It supports Javascript, AJAX, and every other technology that !WebKit is able to handle (Flash, SVG, ...). Spynner takes advantage of JQuery. a powerful Javascript library that makes the interaction with pages and event simulation really easy.

Using Spynner you would able to simulate a web browser with no GUI (though a browsing window can be opened for debugging purposes), so it may be used to implement crawlers or acceptance testing tools.

一個簡單的完整例子:

import spynner

if __name__ == "__main__":
    browser = spynner.Browser()
    # 設置代理
    #browser.set_proxy('http://host:port')
    browser.show()
    try:
        browser.load(url='http://duckduckgo.com', load_timeout=120, tries=1)
    except spynner.SpynnerTimeout:
        print 'Timeout.'
    else:
        # 輸入搜索關鍵字
        browser.wk_fill('input[id="search_form_input_homepage"]', 'something')
        # 點擊搜索按鈕,並等待頁面加載完畢
        browser.wk_click('input[id="search_button_homepage"]', wait_load=True)
        # 獲取頁面的HTML
        html = browser.html
        if html:
            html = html.encode('utf-8')
            open('search_results.html', 'w').write(html)
    browser.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM