zoukankan      html  css  js  c++  java
  • 使用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()
  • 相关阅读:
    HTML CSS整理笔记
    2020软件工程最后一次作业
    form表单的基本用法
    图片预加载和懒加载(2)——懒加载
    ES6——promise基础
    图片预加载和懒加载(2)——预加载
    图片预加载和懒加载(1)
    js时间——转换为我们需要的格式
    原生js瀑布流
    富文本——小程序中使用特殊符号及标签
  • 原文地址:https://www.cnblogs.com/leonbond/p/3070847.html
Copyright © 2011-2022 走看看