超级浏览器-爬虫

2021年6月27日 30点热度 0条评论 来源: zqingchen_7

超级浏览器Webdriver自动化开发

一、概述

通过Webdriver实现对超级浏览器内的店铺进行,自动化控制以及数据抓取,主要流程分为以下两个部分

(一)与超级浏览器主进程通信。

这个部分是通过Socket实现与超级浏览器主进实现通讯的,主要工作是获取店铺列表以及准备店铺环境,一个店铺相当于一个独立浏览器。

(二)通过Selenium API 启动和控制超级浏览器内核

这个部分主要是由自动化程序开发者自行开发,需要自行了解Selenium API如何使用。启动Selenium时有些参数依赖与超级浏览器主进程通讯的结果

二、交互时序图

三、必要条件以及注意事项

(一)启动超级浏览器主进程必要配置启动参数

1、--run_type=web_driver

指定以Webdriver 模式运行主进程,本质是让超级浏览器以无界面状态运行。超级浏览器进程会自动保证进程唯一,所以多次启动会自动放弃后启动进程。但是手动点击启动的超级浏览器会Kill掉Webdriver 模式运行的进程

2、--socket_port=端口号

告诉超级浏览器双方socket通讯端口是什么,超级浏览器会以该端口在127.0.0.1启动一个socket服务端

(二)Socket通讯注意事项

1、每条Socket请求和响应数据必须以"\r\n"结尾

2、Socket请求内容和返回结果都是通过JSON结构组织,收发消息统一以UTF-8编码

3、Socket请求的相应都是异步返回的,可以并发执行,通过在请求参数里面添加一个全局唯一的requestId字段来标识请求,该字段会在响应内返回

(三)其他注意事项

1、getBrowserEnvInfo返回数据不能复用,每次都要重新调用。

2、需要根据运行设备的配置,适当控制同时启动的店铺浏览器窗口总个数,店铺刚刚启动时非常消耗CPU可以考虑错开启动。这个部分需要开发者自行调优,没有明确的标准。

四、Socket接口说明

(一)Action : getBrowserList

1、说明:获取店铺列表

2、请求参数:

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "getBrowserList",
	"requestId": "全局唯一标识"
}

3、响应结果:

{
	"statusCode": "状态码",
	"err": "异常信息",
	"action": "getBrowserList",
	"requestId": "全局唯一标识",
	"browserList": [{
		"browserOauth": "店铺ID",
		"browserName": "店铺名称",
		"browserIp": "店铺IP",
		"siteId": "店铺所属站点",
                "isExpired": false //ip是否过期
	}]
}

4、状态码:

(1)0 : 成功
(2)-10000 : 未知异常
(3)-10002 : Socket参数非法
(4)-10003 : 登录失败
(5)-10004 : 获取店铺列表时服务器返回异常

(二)Action : startBrowser

1、说明:启动店铺,关闭店铺需要调用stopBrowser,连续两次调用startBrowser会视为重启

2、请求参数:

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "startBrowser",
	"browserOauth": "店铺ID",
        "isHeadless": true, //是否启用无头模式
	"requestId": "全局唯一标识"
}

3、响应结果:

{
	"statusCode": "状态码",
	"err": "异常信息",
	"action": "startBrowser",
	"browserOauth": "店铺ID",
	"requestId": "全局唯一标识",
	"launcherPage": "店铺所属平台的默认启动页面",
	"debuggingPort": "调试端口"
}

4、启动Selenium 必要参数

//根据startBrowser返回结果启动Selenium
ChromeOptions options = new ChromeOptions();
//调试端口
options.setExperimentalOption("debuggerAddress", "127.0.0.1:" + debuggingPort);
//删除其他不需要参数

5、状态码:

(1)0 : 成功
(2)-10000 : 未知异常
(3)-10001 : 内核窗口创建失败
(4)-10002 : Socket参数非法
(5)-10003 : 登录失败
(6)-10004 : browserOauth缺失
(7)-10005 : 该店铺上次请求的startBrowser还未执行结束
(8)大于零的状态码:
1 : 初始化数据失败
2 : 检测到当前IP无法正常使用,请联系客服
4 : 初始化时区失败
5 : 初始化代理失败
6 : 初始化黑白名单
7 : 启动内核失败
8 : 初始化浏览器个人目录
9 : 初始化Cookies失败
11 : 初始化浏览器设置文件
13 : 初始化代理信息配置

(三)Action : stopBrowser

1、说明:关闭店铺窗口

2、请求参数:

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "stopBrowser",
	"requestId": "全局唯一标识"
}

3、响应结果:

{
	"statusCode": "状态码",
	"err": "异常信息",
	"action": "stopBrowser",
	"requestId": "全局唯一标识"
}

4、状态码:

(1) 0 : 成功
(2)-10000 : 未知异常
(3)-10002 : Socket参数非法
(4)-10003 : 登录失败

(四)Action : getBrowserEnvInfo

1、说明:和startBrowser类似,区别就是内核窗口startBrowser由主程序启动,getBrowserEnvInfo由Webdriver启动

2、请求参数

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "getBrowserEnvInfo",
	"browserOauth": "店铺ID",
        "isHeadless": true, //是否启用无头模式
	"requestId": "全局唯一标识"
}

3、响应结果:

{
	"statusCode": "状态码",
	"err": "异常信息",
	"action": "getBrowserEnvInfo",
	"browserOauth": "店铺ID",
	"requestId": "全局唯一标识",
	"browserPath": "内核exe所在位置",
	"launcherPage": "店铺所属平台的默认启动页面",
	"browserArguments": "启动必要参数",
	"debuggingPort": "调试端口"
}

4、启动Selenium 必要参数

//根据getBrowserEnvInfo 返回结果启动Selenium
ChromeOptions options = new ChromeOptions();
//内核exe所在位置
options.addArguments(browserArguments);
//启动必要参数
options.setBinary(browserPath);
//调试端口
options.addArguments("--remote-debugging-port=" + debuggingPort);

5、状态码:参考Action : startBrowser

(五)Action : heartbeat

1、说明:非必要接口,只是用于保活Socket连接

2、请求参数

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "heartbeat",
	"requestId": "全局唯一标识"
}

3、响应结果:

{
	"statusCode": "状态码",
	"err": "异常信息",
	"action": "heartbeat",
	"requestId": "全局唯一标识"
}

4、状态码:

(1) 0 : 成功
(2)-10000 : 未知异常
(3)-10002 : Socket参数非法
(4)-10003 : 登录失败

(六)Action : exit

1、说明:正常退出超级浏览器主进程,会自动关闭已启动店铺并保持店铺cookie等信息。

2、请求参数:

{
	"userInfo": "{\"company\":\"公司\",\"username\":\"用户名\",\"password\":\"密码\"}",
	"action": "exit",
	"requestId": "全局唯一标识"
}

3、响应码:

4、状态码:

(1) 0 : 成功
(2)-10000 : 未知异常
(3)-10002 : Socket参数非法
(4)-10003 : 登陆失败

五、getBrowserList中的SiteId说明

index id name
1 1 美国亚马逊
2 2 加拿大亚马逊
3 3 日本亚马逊
4 4 英国亚马逊
5 5 法国亚马逊
6 7 意大利亚马逊
7 10 德国亚马逊
8 11 西班牙亚马逊
    原文作者:zqingchen_7
    原文地址: https://www.cnblogs.com/skyxing7/p/14929290.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。