大数据 Scala java反射机制 Markdown CPU iframe layout LimeJS vue版本 vue前端 jquery循环 mac安装hadoop oracle取第一条数据 mysql错误代码1064 当前时间减一天 mysql或者条件 docker导入镜像 kubernetes视频 python取随机数 python生成多个随机数 python或运算 python操作文件 javaqueue java抽象 java操作mysql java搭建 java连接mysql数据库 java写入txt文件 java定义接口 java创建集合 java多线程编程 电子书之家 crazytalk 苹果滚动截屏 h370主板 网络是怎样连接的 路由器有没有辐射 js数组移除指定元素 渐变事件 特战英雄辅助
当前位置: 首页 > 学习教程  > 编程学习

强大的ghost.py 使用实例

2021/1/9 1:57:33 文章标签: ghost查看器

2019独角兽企业重金招聘Python工程师标准>>> 安装 安装需要包ghost.py 及PyQt或者PySide。 安装方法 : 打开cmd或者命令提示符命令窗口,输入 pip install ghostpip install pyside 当然前提是要将pip.exe 的目录 ……Python\Scripts 添加到环境变量中&…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

安装

安装需要包ghost.py 及PyQt或者PySide。 
安装方法 : 
打开cmd或者命令提示符命令窗口,输入

 pip install ghost
 pip install pyside

当然前提是要将pip.exe 的目录 ……Python\Scripts 添加到环境变量中,或者将命令提示窗的工作路径换到此目录下。

打开python GUI 
输入:

Import ghost
Help(ghost)

即可查看ghost 的版本 
自己使用的最新版本。

这里写图片描述

实例

进入ghostp.py文件中。目录一般在 ….\Lib\site-packages\ghost

使用的类包含 :Ghost Session

1 启动一个web 客户端:

打开python GUI 输入以下代码

from ghost import Ghost, Session

gh = Ghost()

se = Session(gh, display = True)

se.open("https://www.baidu.com/")

即可看到一个打开百度首页的web客户端

这里写图片描述

代码解释:

1 导入需要使用的类 ;

3 新建Session 对象,同时传入初始化参数 ;

4 使用Session 对象打开 百度链接

查看ghost.py源码,可以看到:

Ghost类只有一个 初始化函数init(),可以输入有关log信息,以及插件(自己没用过) 
Session类包含所有ghost进行操作的函数,在初始化 Session函数中,可以看到有以下参数

def __init__(
        self,
        ghost,
        user_agent=default_user_agent,
        wait_timeout=8,
        wait_callback=None,
        display=False,
        viewport_size=(800, 600),
        ignore_ssl_errors=True,
        plugins_enabled=False,
        java_enabled=False,
        javascript_enabled=True,
        download_images=True,
        show_scrollbars=True,
        exclude=None,
        network_access_manager_class=NetworkAccessManager,
        web_page_class=GhostWebPage,
):

如初始化函数上的解释参数说明:

ghost :                         Ghost的对象 *
user_agent :                    代理,作为打开网页链接时使用 *
wait_timeout :                  等待超时 *
wait_callback :                 周期性的执行, +
log_level :                     日志级别 
log_handler :                   日志处理器
display :                       web客户端是否显示 *
viewport_size :                 web客户端显示的大小 *
ignore_ssl_errors:             布尔类型,用于强制忽视ssl 错误
plugins_enabled:               是否启用插件,如flash
java_enabled :                 是否启用Java JRE 
download_images :              提示浏览器是否下载图片 +
exclude  :                     一个正则表达式,用于决定哪个url,在发送请求时被执行。 +

(说明,以后后面带*的参数是自己经常使用的参数,带+号的是自己觉得可以试试给参数赋值,看看效果)

在上面的session类实例化时,初始化了ghost,display参数,当然你可以设置下viewport_size参数, 
格式:viewport_size=(1000, 1000),看看与之前的效果变化。

同时也可以调用Session的函数set_viewport_size(width, height)来设置。

关于session的open函数,也可以查看下它的参数列表。此时看下body 这个参数,通过参数解释,个人认为这是发送post时的数据参数,因为在requests使用的例子中,官方教程使用payload作为post数据的变量。

2 在搜索框中输入要搜索的关键字

继续接着上一步进行操作。既然要在搜索框中输入关键字,首先是要判断哪个是输入框,然后再输入值。 
查看 类Session 的函数,可以看到有两个函数可以进行输入值:

fill(selector, values)
set_field_value( selector, value, blur=True)

根据解释,fill是用来填表单的,是对set_field_value的一个调用封装。参数解释:

selector:表单 css选择器
values : 表单填充内容,字典数据类型
set_field_value , 设置匹配的选择器的值。参数解释:

selector:  要设置值的区域的css选择器
value :  设置的值
第三参数没用过。

继续输入以下命令:

se.set_field_value("#kw","hello world")

发现web客户端的搜索框没有输入值。 
刷新一下吧。

se.show()

出来了

这里写图片描述

说明: 
关于css选择器,进入http://www.w3school.com.cn/css/ ,可以看到css有: 
CSS id 选择器 :id 选择器以 “#” 来定义。 
CSS 类选择器,类选择器以一个点号显示 “.” 
CSS 属性选择器。属性选择器以”[]”显示 
CSS 派生选择器 : (没用过) 
此处使用的是CSS id选择器。

3 点击搜索

既然关键字都输进去了,那进行搜索吧,正常我们在搜索时,输完关键字了,就点击搜索按钮。即查找按钮button,然后点击。 
查看类Session函数:

click( selector, btn=0) 

参数解释:

Selector :  css3选择器,选择要点击的目标元素

btn=0:     选择鼠标键,0-左键  1-中间键(滚轮) 2-右键

先找到css selector:

<input type=submit value="百度一下" id="su" class="btn self-btn bg s_btn"> 

继续输入命令:

se.click("#su",btn=0) 

se.show()

这个出来有点慢,多刷刷。

这里写图片描述

4 等待元素出现

有时候ghost反应慢,只有等待某个标签元素出现后才能进行下一步操作(点击,填表单等),也就是要等待元素出现。 
查看session中的函数:

wait_for_selector(selector, timeout=None)

参数解释:

Selector:  等待这个css selector 加载完成
Timeout :  等待多久还没出现css selector,就超时,加载css selector失败,后面的程序可能就不能对这个
            css selector 进行操作了。

其他还有些等待的函数:

wait_while_selector
wait_for_text
wait_for_page_loaded
wait_for_alert

请参考函数解释

5 模拟JavaScript执行

继续之前的操作,想获取百度一下按键的值,在火狐浏览器中的firebug下的控制台(console)下,可以测试自己的js语句执行的结果。 
获取百度一下这个按键上的显示值(百度一下)的js语句:

document.getElementById('su').value

python GUI输入命令:

print se.evaluate("document.getElementById('su').value")

输出一个元组值,将第一个值直接print,就可以看到获取的值

这里写图片描述

对于函数

evaluate_js_file ( path, encoding='utf-8', **kwargs)

执行的是js文件

其他函数可以根据之前的分析方法,查看函数的说明,参数解释,程序源码进行理解,并尝试操作。

推荐: 
selenium 
个人觉得selenium好用,它直接调用firefox 或者 chrome 浏览器,语法和ghost.py 相似,功能更多(之前用了一下,现在记不清了)

转载于:https://my.oschina.net/mickelfeng/blog/892998


本文链接: http://www.dtmao.cc/news_show_1100137.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?