有道可以在上面编辑如果有好的解决方法欢迎加入编写。转载:有道ChromeLine 解决方法收集
整理不易请来个赞呗!(欢迎打赏)
要使得Chrome支持与应用程序交互,首先需要指定远程调试端口。在命令行启动一个Chrome实例,并加上下面的参数,并等待其启动完成。9222表示启动浏览器远程调试端口,端口号可自定,但需要确保端口未被占用.也可自己定义调试端口.chrome.exe --remote-debugging-port=9222
这之后打开http://localhost:9222 或者 http://127.0.0.1:9222/ 就能看到你开启的Chrome实例中所有打开的标签页面,点击其中一个标签,即可开始调试目标页面。
三.导航标签(TAG)的访问与控制
获取所有打开的标签的信息,访问
标签管理
浏览器启动后,我们就可以在程序中通过socket的方式实现和chrome的交互了。Chrome Debug API包括两个部分:标签管理和页面管理。首先我们介绍标签管理部分,它是Rest形式的API接口,我们可以通过浏览器进行协议的模拟。
首先用浏览器打开http://localhost:9222/json 或者 http://127.0.0.1:9222/json,这是当前所有标签的list接口,可以看到如下接口数据:
[ { "description": "", "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/dae364ad-456c-4779-a2d7-53cd487c5357", "faviconUrl": "https://www.baidu.com/favicon.ico", "id": "dae364ad-456c-4779-a2d7-53cd487c5357", "title": "百度一下,你就知道", "type": "page", "url": "https://www.baidu.com/", "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/dae364ad-456c-4779-a2d7-53cd487c5357"}, { "description": "", "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/f2da603a-5914-406c-a08d-a084edeec736", "id": "f2da603a-5914-406c-a08d-a084edeec736", "title": "Developer Tools - https://www.baidu.com/", "type": "page", "url": "http://localhost:9222/json", "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/f2da603a-5914-406c-a08d-a084edeec736"} ]
Description: 与标签相关的描述信息
DevtoolsFrontendUrl: 与这个标签相关联的页面的前端调试地址,可将该URL复制到浏览器中直接访问即可调试目标页面
Id: 用于标识和定位这个标签的唯一身份信息(这个重要)
Title: 当前标签上显示的标题信息
Type: 标签的类型
Url: 与标签相关联的页面所加载的URL地址
WebSocketDebuggerUrl: 与这个标签相关联的页面的后端调试地址(第三方接口)
除此之外,常见的访问命令如下:
http://127.0.0.1:9222/json :查看已经打开的Tab列表
http://127.0.0.1:9222/json/version : 查看浏览器版本信息
http://127.0.0.1:9222/json/new?http://www.baidu.com : 新开Tab打开指定地址
激活标签,需要传入该标签的ID
http://localhost:9222/json/activate/f2da603a-5914-406c-a08d-a084edeec736
关闭标签,需要传入该标签的ID
http://localhost:9222/json/close/f2da603a-5914-406c-a08d-a084edeec736
页面操作
前面的API只能做到简单的打开,关闭标签操作,我么往往还需要对页面进行更详细的操作!那么我们开始进入用易语言代码来实现控制浏览器。
下载最新的软件地址:http://ps-works.cn/open-source.html
源码下载地址:https://github.com/kirino17/chromelink
模块如下:
所有的控制都是围绕着标签ID来操作,多线程时也是一样的激活对应的ID进程操作。
现在以单线程的来举例:在模块中添加这一段代码
------------------------------单开浏览器-remote-debugging-port=--------------------------------
版本 2
.支持库 eAPI
.子程序 Chrome_单线程, , 公开, 重要取出 连接对象 例:Chrome.置浏览器EX( “C:\.安装路径.\chrome.exe”, 9222, 真)
.参数 参_路径, 文本型
.参数 参_端口, 整数型
.参数 参_隐身, 逻辑型, , 真/假
.局部变量 局部_命令行, 文本型
.局部变量 局部_调试端口, 文本型
' ////////////////////////////////////////////////////////////////////// 第1步
局部_命令行 = 格式化文本 (“%s --remote-debugging-port=%d %s”, 参_路径, 参_端口, 选择 (参_隐身, “--incognito”, “ ”))
WinExec (局部_命令行, 5)
局部_调试端口 = 格式化文本 (“localhost:%d”, 参_端口)
m_chromeAddress = 局部_调试端口
------------------------------多开浏览器-remote-debugging-port=%d --user-data-dir=-----------------------
.版本 2
.支持库 eAPI
.子程序 OpenChrome, 逻辑型, 公开, 启动一个浏览器,成功返回真,失败返回假
.参数 浏览器路径, 文本型, , 结尾不带"\"
.参数 调试端口, 整数型
.参数 缓存目录, 文本型
.参数 清空缓存, 逻辑型, 可空, 如果缓存目录中存在文件数据,将全部删除
.参数 备份初始化数据目录, 文本型, , 结尾不带"\"
.局部变量 tempCachePath, 文本型
.如果真 (是否为空 (清空缓存) 或 清空缓存 = 真)
删除目录 (缓存目录)
处理事件 ()
创建目录 (缓存目录)
处理事件 ()
_复制_初始化文件 (缓存目录, 备份初始化数据目录)
.如果真结束
tempCachePath = 子文本替换 (缓存目录, “\”, “\\”, , , 真)
返回 (运行 (格式化文本 (“%s --remote-debugging-port=%d --user-data-dir=” + #引号 + “%s” + #引号, 浏览器路径, 调试端口, 缓存目录), 假, #普通激活)) ' 多开浏览器需先设置目录
--------------------------------------------------------------
启动时异常情况:
解决运行库问题的方法
把下载下来的文件包中:vc++ runtime package文件夹内的所有文件复制到运行目录下。
如何元素定位: