火 车 浏 览 器 脚 本 管 理 器 操 作 文 档 火 车 浏 览 器 的 脚 本 管 理 器 是 生 成 具 体 执 行 的 各 种 脚 本, 然 后 由 项 目 管 理 器 进 行 调 用 脚 本 管 理 器 中 定 义 了 执 行 脚 本 的 细 节 和 流 程, 项 目 管 理 器 可 以 通 过 修 改 脚 本 运 行 时 的 参 数 变 量, 实 现 批 量, 自 动 化 的 运 行 和 管 理 本 文 档 将 详 细 介 绍 火 车 浏 览 器 的 脚 本 操 作 的 各 个 功 能 一. 界 面 一 览 软 件 的 左 边 是 脚 本 列 表, 每 个 脚 本 中 可 以 查 看 详 细 的 操 作 流 程 在 右 栏 上 边 是 浏 览 器 界 面, 下 边 是 具 体 的 每 一 步 的 脚 本 设 置 二. 工 具 栏 工 具 栏 中, 有 变 量 管 理, 数 据 库, 验 证 码 识 别,http 拦 截 功 能 我 们 先 对 工 具 栏 中 的 这 几 个 功 能 进 行 介 绍 1. 变 量 管 理 火 车 浏 览 器 中, 要 填 写 的 表 单 值, 提 取 后 的 数 据, 运 行 中 的 链 接, 都 是 通 过 变 量 管 理 进 行 操
作 的 打 开 变 量 管 理 器, 我 们 可 以 实 时 的 看 到 每 个 变 量 及 其 当 前 的 值 注 意, 这 里 的 有 变 量 名, 变 量 值, 还 有 变 量 的 类 型, 目 前, 浏 览 器 中 支 持 文 本 变 量,list 列 表, 字 典 类 型 的 变 量 变 量 分 为 只 读 变 量 和 临 时 变 量 只 读 变 量 在 添 加 变 量 时 就 可 以 设 置 值, 或 是 通 过 项 目 管 理 器 运 行 时 修 改 变 量 值 变 量 的 另 一 属 性 是 允 许 外 部 调 用, 只 有 允 许 外 部 调 用 的 变 量, 才 可 以 通 过 项 目 管 理 器 进 行 修 改 我 们 点 击 添 加 变 量, 可 以 看 到 如 图
在 文 本 类 型 的 变 量 中, 我 们 可 以 指 定 变 量 值, 也 可 以 从 本 地 文 件 中 读 取 内 容, 读 取 的 文 本 类 型 必 须 是 utf8 编 码
List 列 表 中, 可 以 可 以 直 接 在 上 图 的 列 表 中 添 加 数 据, 也 可 以 选 中, 从 本 地 文 本 中 读 取 内 容
读 取 的 文 本 是 使 用 指 定 的 分 隔 符 分 成 list 列 表 字 典 变 量 可 以 手 工 添 加 也 可 以 直 接 使 用 文 本 导 入, 程 序 自 动 提 取 2. 数 据 库 配 置
我 们 一 般 不 建 议 在 脚 本 中 使 用 数 据 库 配 置, 而 是 在 项 目 中 使 用 数 据 库 但 是 针 对 一 些 小 的 简 单 的 项 目, 直 接 在 脚 本 中 配 置 好 一 切, 会 更 高 效 每 一 个 项 目 中 是 单 独 可 以 设 置 数 据 库 的 设 置 好 的 数 据 库 可 以 在 脚 本 制 作 中 使 用 我 们 看 一 下 添 加 的 mysql 的 数 据 库 配 置, 脚 本 制 作 中 我 们 讲 数 据 库 的 使 用
3. 验 证 码 配 置 默 认 使 用 手 动 打 码, 如 果 选 中 自 动 打 码, 需 要 选 择 对 应 的 打 码 平 台 和 使 用 自 己 的 打 码 设 置 在 项 目 管 理 器 中, 可 以 使 用 项 目 的 设 置 覆 盖 脚 本 的 打 码 设 置 三. 脚 本 功 能 介 绍 每 一 步 的 操 作 步 骤 都 是 可 以 自 定 义 名 称, 方 便 用 户 设 置 流 程, 从 每 一 步 的 操 作 图 标 上, 可 以 看 到 具 体 是 何 种 操 作 1. 浏 览 器 操 作 A. 打 开 网 页 打 开 网 页 可 以 直 接 打 开 指 定 网 址, 也 可 以 使 用 变 量 来 打 开 直 接 点 击 网 址 后 边 的 小 图 标, 即 可 以 使 用 变 量 可 以 设 置 访 问 的 来 源 页 面 如 果 没 有 变 量, 则 使 用 浏 览 器 实 际 运 行 过 程 中 的 上 一 页 为 来 源 页 面
B. 后 退 一 步 相 当 于 浏 览 器 操 作 中 的 后 退 如 果 有 多 个 操 作, 可 以 后 退 多 次 C. 浏 览 器 设 置 浏 览 器 设 置, 可 以 修 改 浏 览 器 的 UserAgent, 也 可 以 禁 止 载 入 图 片, 加 快 访 问 速 度 还 可 以 设 置 代 理 等 操 作 浏 览 器 设 置 可 以 在 多 个 地 方 设 置, 比 如 有 的 步 骤 不 需 要 图 片, 可 以 禁 止, 在 需 要 图 片 的 地 方, 可 以 再 次 启 用 整 个 浏 览 器 的 设 置, 以 实 际 中 最 后 的 设 置 为 准 D. 滚 动 条 设 置 在 遇 到 一 些 瀑 布 流 的 页 面 时, 要 获 取 更 多 数 据, 就 要 不 停 的 下 拉 页 面 这 时, 使 用 滚 动 条 设 置, 结 合 无 限 循 环 和 判 断, 还 有 跳 出 循 环, 可 以 不 断 的 得 到 数 据 了
2. 逻 辑 操 作 A. 条 件 判 断 如 图, 我 们 可 以 使 用 条 件 判 断 得 到 当 前 用 户 是 否 登 录, 或 是 当 前 运 行 的 是 不 是 正 常 可 以 通 过 网 页 源 码 码 进 行 比 较 进 行 True 和 False 的 判 断 通 过 条 件 判 断, 实 现 了 程 序 流 程 的 控 制 B. 循 环 通 过 循 环, 我 们 可 以 循 环 去 访 问 一 个 list 列 表 中 的 值, 也 可 以 使 用 无 限 循 环, 用 来 提 取 一 些 不 断 更 新 的 数 据, 或 是 不 断 的 去 点 击 下 一 页 这 样 的 操 作
遍 历 list 变 量 时, 要 将 每 个 循 环 的 变 量 保 存 到 一 个 新 的 临 时 变 量, 在 循 环 的 步 骤 中, 使 用 这 个 变 量 就 可 以 了 字 典 的 变 量 暂 时 还 没 有 完 成 其 中, 点 击 固 定 的 元 素 一 般 用 来 处 理 下 一 页 这 样 的 循 环 点 击 点 击 指 定 ( 固 定 ) 的 元 素 列 表, 是 点 击 一 个 只 读 list 变 量 中 的 值, 使 用 其 当 做 xpath, 来 进 行 点 击 操 作 循 环 执 行 次 数 后, 可 以 直 接 跳 出 循 环 在 循 环 中, 我 们 可 以 使 用 结 束 循 环 跳 出 当 前 的 循 环 C. 跳 转 可 以 直 接 从 某 个 步 骤 跳 转 到 另 一 个 步 骤 特 别 适 合 从 判 断 中 跳 转 或 是 直 接 改 变 流 程 D. 暂 停 等 待
这 个 功 能 在 一 些 网 站 中 十 分 有 用, 在 某 个 操 作 完 成 后 暂 停 一 下, 可 以 防 止 因 操 作 太 快 而 被 判 定 为 机 器 人, 或 是 要 等 等 某 个 长 时 间 的 操 作 时, 可 以 等 待 一 定 时 间 让 流 程 器 操 作 完 成 E. 结 束 循 环 可 以 直 接 结 束 掉 当 前 的 循 环 F. 结 束 流 程 目 前 没 有 完 成, 可 以 直 接 结 束 掉 整 个 脚 本 的 运 行, 可 以 设 定 结 束 时 返 回 那 些 变 量 值 这 个 是 和 项 目 管 理 器 一 并 协 作 使 用 的 比 如 返 回 哪 些 变 量, 让 项 目 管 理 器 得 到 数 据 使 用 3. 元 素 操 作 元 素 操 作 中 最 常 用 的 部 分 是 寻 找 到 元 素 火 车 浏 览 器 使 用 XPath 和 元 素 定 位 方 式 来 获 取 元 素, 如 图 使 用 XPath 的 方 式 非 常 简 单, 直 接 点 击 浏 览 器 上 的 带 小 箭 头 的 图 标, 就 可 以 在 浏 览 器 中 选 元 素 了 选 中 的 元 素 将 会 高 亮 显 示 然 后 我 们 就 可 以 在 提 取 规 则 中 看 到 其 Xpath 的 值 了, 我 们 可 以 使 用 测 试 查 找 元 素 来 确 定 写 的 XPath 是 否 正 确 火 车 浏 览 器 是 使 用 标 准 的 XPath, 所 以 大 家 可 以 看 http://www.w3school.com.cn/xpath/xpath_syntax.asp, http://msdn.microsoft.com/zh-cn/library/ms256086.aspx, http://www.zvon.org/xxl/xpathtutorial/general_chi/examples.html, 这 样 的 教 程, 我 们 后 边 也 会 整 理 专 门 的 xpath 教 程 另 一 个 元 素 定 位 功 能, 是 使 用 id 或 是 其 它 属 性 定 位 元 素 如 图, 直 接 点 击 浏 览 器 上 的 带 小 箭 头 的 图 标, 就 可 以 看 到 下 边 的 元 素 定 位 变 化 了 其 中, 右
侧 的 是 生 成 的 按 属 性 定 位 元 素 的 方 式, 可 以 同 时 使 用 几 种 方 式 进 行 联 合 定 位, 不 需 要 的 可 以 删 除 掉 左 侧 的 是 可 以 点 击, 传 入 的 是 使 用 outerhtml 进 行 判 断 的 方 式, 这 样, 就 可 以 使 用 正 则 的 方 式 进 行 定 位 元 素 比 如 一 些 id 和 value 都 是 动 态 生 成 的 页 面 A. 写 值 写 值 可 以 使 用 固 定 的 字 符 串 或 是 变 量 值 直 接 修 改 指 定 的 网 页 元 素 值 比 如 我 们 可 以 用 来 填 表 在 填 表 这 里, 可 以 输 入 文 本, 也 可 以 输 入 指 定 变 量 像 搜 索 类 的, 可 以 输 入 值 完 成 后, 点 击 搜 索 按 钮 进 行 提 交 B. 点 击 选 中 元 素 后, 执 行 点 击 操 作 即 可
C. 单 次 取 值
如 图, 我 们 要 提 取 百 度 搜 索 结 果 的 链 接 地 址, 就 可 以 使 用 单 次 取 值, 这 个 单 次 取 值 意 思 是 每 一 次 提 取 的 值 是 放 在 一 个 变 量 中 的 比 如 这 个, 我 们 找 到 了 一 个 元 素, 取 这 个 元 素 的 链 接, 即 href 的 值, 点 击 测 试 提 取, 可 以 看 到 如 果 我 们 选 中, 获 取 所 有 数 据 保 存 到 List 变 量, 则 测 试 可 以 看 到 所 有 符 合 的 结 果
获 取 的 值 可 以 保 存 在 List 变 量 中 了 D. 批 量 取 值
如 图, 我 们 可 以 一 次 添 加 多 个 变 量, 进 行 取 值 操 作 E. 验 证 码 识 别 使 用 验 证 码 识 别, 我 们 可 以 将 验 证 码 所 在 元 素 提 取 出 来, 程 序 会 自 动 提 取 其 中 的 图 片, 作 为 验 证 码, 供 人 工 识 别 或 是 接 入 打 码 平 台, 识 别 的 结 果 保 存 到 一 个 变 量 中 去, 我 们 可 以 再 使 用 自 动 填 表, 来 填 写 验 证 码 的 结 果 4. 变 量 处 理 这 里 的 操 作 很 好 懂, 就 是 产 生 一 些 随 机 数 存 到 变 量, 或 是 对 现 在 有 的 变 量 进 行 处 理 5. 接 收 邮 件 对 于 一 些 注 册 的 任 务, 输 入 邮 箱 后, 我 们 要 进 邮 箱 取 得 激 活 链 接 并 点 击, 帐 号 才 可 以 使 用 在 这 里, 配 置 好 邮 件 以 后, 就 可 以 将 整 理 邮 件 内 容 作 为 一 个 变 量 进 行 保 存, 然 后 我 们 利 用 变 量 处 理, 再 提 取 其 中 的 链 接 地 址, 再 进 行 点 击, 就 可 以 了
6. 数 据 库 操 作 通 过 数 据 库 操 作, 我 们 可 以 创 建 数 据 库, 进 行 查 询, 写 入 数 据 等 操 作 在 执 行 SQL 操 作 时, 我 们 先 配 置 一 个 数 据 库 操 作 需 要 注 意 的 是, 查 询 操 作 的 结 果 是 可 以 存 储 到 一 个 Datatable 变 量 中 去 目 前, 保 存 到 datatable 功 能 还 在 开 发 中 直 接 进 行 SQL 语 句 的 操 作 已 经 可 以 使 用 需 要 注 意 的 一 点 是, 创 建 数 据 表 操 作 中, 请 注 意 创 建 语 句 中 的 表 名 和 这 里 的 表 名 要 一 致 四. 具 体 实 例
1. 辽 沈 晚 报 新 闻 采 集 难 度 : 网 站 要 登 录, 登 录 时 有 验 证 码 新 闻 列 表 页 多 层 A. 先 打 开 网 站 首 页, 操 作 : 浏 览 器 - 打 开 网 页 B. 我 们 看 一 下 是 否 已 经 登 录, 如 果 没 有 登 录 就 先 进 行 登 录 操 作 : 逻 辑 - 条 件 判 断
在 这 里, 我 们 用 登 录 后 的 标 识 字 符, 退 出 登 录 做 为 判 断 条 件 C. 如 果 没 有 登 录 则 进 行 登 录 操 作 - 填 写 用 户 名 注 意, 这 里 我 们 使 用 的 都 是 变 量, 主 要 是 方 便 不 同 的 用 户 在 变 量 管 理 中 修 改 自 己 的 用 户 名 和 密 码 操 作 - 填 写 密 码
操 作 - 验 证 码 识 别 注 意, 验 证 码 识 别 是 找 到 验 证 码 图 片 这 个 元 素, 然 后 程 序 运 行 到 这 里 时, 会 找 到 这 个 图 片, 然 后 使 用 手 工 打 码 或 是 自 动 打 码, 将 结 果 保 存 到 一 个 变 量 中, 我 们 再 使 用 填 写 功 能, 写 入 验 证 码 即 可 本 例 中, 我 们 将 结 果 存 到 验 证 码 这 个 变 量 中 操 作 - 填 写 验 证 码
我 们 要 填 写 什 么 验 证 码, 直 接 点 击 后 边 的 小 笔 图 标, 符 合 条 件 的 变 量 会 显 示 出 来, 我 们 直 接 点 击 就 行 了 操 作 - 点 击 登 录 按 钮
注 意, 这 里 也 是 要 找 到 我 们 在 网 页 上 点 击 的 元 素, 然 后 执 行 事 件 就 可 以 了 有 些 网 页 上 登 录 的 是 一 个 按 钮, 有 的 可 能 是 一 个 图 片, 还 有 的 可 能 是 一 个 图 层 不 过 没 有 关 系 在 浏 览 器 中, 只 要 是 一 个 可 以 找 到 的 元 素 即 可 我 们 找 到 它 并 点 击, 就 可 以 实 现 点 击 的 效 果 了 操 作 - 判 断 是 否 登 录 我 们 要 和 刚 才 一 样, 判 断 一 下 是 否 登 录 成 功 了, 如 果 没 有 成 功, 我 们 结 束 整 个 运 行 流 程 如 果 成 功, 继 续 进 入 下 一 步 D. 点 击 图 片 进 入 当 天 的 新 闻 页 面
我 们 登 录 成 功 后, 会 是 如 上 图 的 界 面, 我 们 要 点 击 当 天 的 头 条, 进 入 新 闻 页 面 首 页 点 击 后 是 这 样 的 效 果
如 图, 我 们 看 到 了 各 个 不 同 的 版 面 和 其 中 的 闻 新 现 在 我 们 的 思 路 是 先 采 集 所 有 的 版 面 链 接, 然 后 去 各 个 不 同 的 版 面 链 接 中 再 去 采 集 如 图
在 获 取 这 个 链 接 的 时 候, 我 们 要 这 样 来 做, 我 们 先 从 上 往 下, 获 取 几 个 链 接 的 xpath, 比 如 A01 版 的,
大 家 可 以 看 到, 除 第 一 个 的 xpath 比 较 和 其 它 的 不 一 样 外, 其 它 的 都 是 一 个 样 式, 从 上 往 下 分 别 是 //table[@id='bmdhtable']/tbody/tr[2]/td[1]/a //table[@id='bmdhtable']/tbody/tr[3]/td[1]/a //table[@id='bmdhtable']/tbody/tr[4]/td[1]/a //table[@id='bmdhtable']/tbody/tr[5]/td[1]/a 我 们 会 发 现 一 个 规 律, 就 是 tr 后 的 数 字 是 递 增 的 这 样, 我 们 就 要 使 用 强 大 的 Xpath 功 能 了 XPath 中 可 以 使 用 通 配 符 来 提 取 到 一 组 元 素, 也 可 以 不 写 索 引 获 取 一 组 元 素 我 们 可 以 使 用 以 下 两 种 Xpath 不 加 索 引 ://table[@id='bmdhtable']/tbody/tr/td[1]/a 使 用 通 配 符 ://table[@id='bmdhtable']/tbody/tr[*]/td[1]/a 这 样, 我 们 就 可 以 获 取 这 一 组 数 据 了, 注 意, 要 提 取 一 组 数 据, 要 选 中 这 个, 一 定 注 意
我 们 要 选 中, 获 取 所 有 数 据 保 存 至 List 变 量, 然 后 我 们 点 击 测 试 提 取 注 意, 这 个 属 性 名 称 也 要 选, 链 接 的 属 性 名 称 是 href, 如 果 是 表 单, 一 般 是 value 我 们 点 击 测 试 提 取, 就 可 以 看 到 结 果
我 们 可 以 看 到, 数 据 是 全 完 正 确 还 有, 第 一 条 数 据 也 得 到 了? 为 什 呢? 因 为 我 们 程 序 里 边 的, 是 按 最 短 的 xpath 来 生 成 的, 所 以 一 个 元 素 可 以 有 各 种 xpath 提 取 方 法 D. 现 在 我 们 得 到 所 有 版 面 的 链 接 了, 我 们 循 环 一 条 条 的 去 抓 取 每 个 版 块, 和 版 块 中 的 新 闻 我 们 新 建 一 个 循 环, 循 环 我 们 刚 才 获 取 到 的 版 面 链 接 列 表 在 循 环 中, 我 们 打 开 每 一 个 链 接 的 网 址, 注 意, 我 们 这 里 是 将 列 表 中 循 环 的 每 一 个 元 素 命 名 为 当 前 版 面 链 接, 注 意 看 上 图 我 们 在 打 开 网 页 中, 就 可 以 使 用 它 了 这 里 的 变 量 用 法 就 是 var. 变 量 名, 我 们 这 里 也 可 以 使 用 其 它 的 变 量, 使 用 组 合 方 式 达 到 其 它 的 效 果 打 开 页 面 后, 我 们 在 版 块 页 面 再 提 取 每 个 新 闻 的 链 接
如 图,xpath 的 提 取 设 置 和 前 边 的 一 样, 就 不 赘 述 了 我 们 将 所 有 的 链 接 再 保 存 在 新 闻 网 址 列 表 中 等 循 环 完 了, 我 们 再 去 获 取 这 个 网 址 列 表 得 到 具 体 内 容 当 然, 我 们 也 可 以 在 这 个 页 面 上 再 抓 取 一 些 其 它 的 数 据 我 们 来 看 抓 取 具 体 的 数 据
现 在, 要 看 一 下 我 们 批 量 提 取 数 据 的 功 能 了 操 作 - 元 素 操 作 - 批 量 提 取 我 们 点 击 添 加, 即 可 以 添 加 一 个 字 符 变 量 或 是 list 变 量, 然 后 获 取 元 素 的 属 性 即 可 注 意, 要 获 取 元 素 内 的 html 代 码, 要 使 用 innerhtml 或 outerhtml 我 们 测 试 依 此 类 推, 就 可 以 获 取 到 多 个 变 量 值 我 们 可 以 看 到, 抓 取 的 数 据 中 还 有 html 代 码, 这 个 怎 么 办, 没 关 系, 我 们 使 用 数 据 处 理 功 能 操 作 - 变 量 处 理 - 变 量 处 理
这 样 处 理 完 成 以 后, 我 们 的 标 题 就 是 我 们 需 要 的 了 现 在 最 后 处 理 的 数 据 怎 么 办 呢? 如 果 是 单 个 脚 本 运 行, 我 们 可 以 将 其 保 存 在 数 据 库 中 或 是 文 件 中, 如 果 是 项 目 中 运 行 脚 本, 数 据 是 会 返 回 给 项 目 管 理 器 进 行 处 理 的 我 们 讲 一 下 脚 本 中 保 存 数 据 我 们 以 sqlite 数 据 库 为 例 我 们 先 建 一 个 数 据 库 配 置 然 后, 我 们 要 检 测 一 下, 如 果 没 有 这 个 表, 就 创 建 操 作 - 数 据 库 操 作 - 执 行 Sql 语 句
注 意, 这 里 的 表 名 一 定 要 写, 程 序 不 会 去 分 析 sql 语 句 提 取 表 名, 所 以 这 里 是 一 次 只 能 建 一 个 表, 当 然, 有 的 数 据 库 可 以 在 sql 语 句 里 判 断 不 存 在 则 创 建, 也 是 可 以 的 这 里 一 次 是 执 行 一 条 SQL 语 句 现 在 我 们 将 在 循 环 中 获 取 的 数 据 保 存 到 数 据 库 中 现 在 我 们 看 到 这 样 一 个 情 况
我 们 的 创 建 数 据 库 还 在 使 用 数 据 库 之 后, 这 就 有 些 问 题 了, 不 过 没 关 系, 如 图, 我 们 调 整 步 骤 顺 序 这 样 就 可 以 了 所 有 工 作 完 成, 我 们 测 试 一 下 完 整 运 行
直 接 点 击 脚 本 运 行, 实 际 是 会 打 开 单 独 的 脚 本 运 行 器 的, 现 在 我 们 录 制 用 的 版 本 是 直 接 显 示 的, 我 们 看 运 行 日 志 会 发 现 提 取 失 败, 为 什 么 会 这 样 呢, 经 检 查, 原 来 这 个 页 面 加 载 是 非 常 慢 的, 所 以 我 们 要 加 一 个 暂 停 等 待 操 作 现 在 再 测 试, 一 切 ok.
继 续 执 行 然 后 采 集 并 保 存
我 们 打 开 数 据 库 看 一 下 这 样, 一 个 完 整 的 脚 本 就 完 成 了