使用前提:
已使用命令行唤起Hubstudio并通过api成功打开环境,获取返回的debuggingPort参数
【HTTP模式 说明】,
如需使用ws连接,可通过GET请求 http://localhost:debuggingPort参数/json/version 获取返回的webSocketDebuggerUrl参数
1.Python
1.1.webdriver
示例selenium版本为4.11.2
import time
import sys
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 获取webdriver
def get_driver_by_path(webdriver_path, port):
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", '127.0.0.1:' + str(port))
return webdriver.Chrome(service=Service(webdriver_path), options=options)
def open_baidu(driver):
driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)
driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('hubstudio')
time.sleep(1)
driver.find_element(By.ID, "su").click()
time.sleep(6)
if __name__ == '__main__':
url = r'http://127.0.0.1:6873/api/v1/browser/start' # 打开环境
open_data = {"containerCode": "84794164"} # 填写参数,环境id可从创建环境或环境列表接口获取
open_res = requests.post(url, json=open_data).json()
if open_res['code'] != 0:
print('环境打开失败:%s' % open_res)
sys.exit()
webdriver_path = open_res['data']['webdriver'] # 获取webdriver路径
debugging_port = open_res['data']['debuggingPort'] # 获取调试端口
# 获取webdriver
driver = get_driver_by_path(webdriver_path, debugging_port) # 填写打开环境返回的webdriver和debuggingPort参数
# 运行脚本
open_baidu(driver)
示例selenium版本为3.141
import time
import sys
import requests
from selenium import webdriver
# 获取webdriver
def get_driver_by_path(webdriver_path, port):
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", '127.0.0.1:' + str(port))
return webdriver.Chrome(webdriver_path, options=options)
def open_baidu(driver):
driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)
driver.find_element_by_class_name('s_ipt').send_keys('hubstudio')
time.sleep(1)
driver.find_element_by_id("su").click()
time.sleep(6)
if __name__ == '__main__':
url = r'http://127.0.0.1:6873/api/v1/browser/start' # 打开环境
open_data = {"containerCode": "84794164"} # 填写参数,环境id可从创建环境或环境列表接口获取
open_res = requests.post(url, json=open_data).json()
if open_res['code'] != 0:
print('环境打开失败:%s' % open_res)
sys.exit()
webdriver_path = open_res['data']['webdriver'] # 获取webdriver路径
debugging_port = open_res['data']['debuggingPort'] # 获取调试端口
# 获取webdriver
driver = get_driver_by_path(webdriver_path, debugging_port) # 填写打开环境返回的webdriver和debuggingPort参数
# 运行脚本
open_baidu(driver)
1.2.playwright
import sys
import requests
from playwright import sync_api
# 获取playwright浏览器会话
def get_browser_context(playwright, port):
browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:" + str(port))
context = browser.contexts[0]
return context
def open_baidu(browser_context):
# 使用第一个标签页打开playwright官网
page = browser_context.pages[0]
page.goto("https://www.baidu.com")
print(page.title())
# 新建标签页
new_page = browser_context.new_page()
# 打开百度
new_page.goto("https://www.baidu.com")
print(new_page.title())
# 输入hubstudio并搜索
new_page.fill('input[name="wd"]', 'hubstudio')
new_page.press('input[id="su"]', 'Enter')
if __name__ == '__main__':
'''需要安装playwright依赖: pip install playwright '''
url = r'http://127.0.0.1:6873/api/v1/browser/start' # 打开环境
open_data = {"containerCode": "84794164"} # 填写参数,环境id可从创建环境或环境列表接口获取
open_res = requests.post(url, json=open_data).json()
if open_res['code'] != 0:
print('环境打开失败:%s' % open_res)
sys.exit()
debugging_port = open_res['data']['debuggingPort'] # 获取调试端口
# 获取playwright浏览器会话
playwright = sync_api.sync_playwright().start()
browser_context = get_browser_context(playwright, debugging_port) # 填写环境的debuggingPort参数
# 运行脚本
open_baidu(browser_context)
1.3.pyppeteer
import asyncio
import sys
import requests
from pyppeteer import connect
async def get_browser(port):
option = {
'browserURL': 'http://127.0.0.1:%s' % str(port),
'defaultViewport': None
}
return await connect(option)
async def main():
url = r'http://127.0.0.1:6873/api/v1/browser/start' # 打开环境
open_data = {"containerCode": "84794164"} # 填写参数,环境id可从创建环境或环境列表接口获取
open_res = requests.post(url, json=open_data).json()
if open_res['code'] != 0:
print('环境打开失败:%s' % open_res)
sys.exit()
debugging_port = open_res['data']['debuggingPort'] # 获取调试端口
browser = await get_browser(debugging_port) # 填写打开环境返回的debuggingPort参数
page = await browser.newPage()
await page.goto('https://www.baidu.com')
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
2.Java
2.1.webdriver
示例selenium版本为3.141
@Test
public void test() throws InterruptedException, IOException {
// 获取webdriver
System.setProperty("webdriver.chrome.driver", webdriver); // 填写打开环境返回的webdriver参数
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("debuggerAddress", "127.0.0.1:" + debuggingPort); // 填写打开环境的debuggingPort参数
ChromeDriver driver = new ChromeDriver(chromeOptions);
// 运行脚本
// 打开百度首页
driver.get("https://www.baidu.com");
// 获取输入框,输入hubstudio
driver.findElement(By.id("kw")).sendKeys("hubstudio");
// 获取“百度一下”按钮,进行搜索
driver.findElement(By.id("su")).click();
TimeUnit.SECONDS.sleep(5);
}
2.2.playwright
@Test
public void test() throws IOException {
// 获取playwright浏览器会话
Playwright playwright = Playwright.create();
BrowserType chromium = playwright.chromium();
Browser browser = chromium.connectOverCDP("http://127.0.0.1:" + debuggingPort); // 填写环境的debuggingPort参数
BrowserContext browserContext = browser.contexts().get(0);
// 运行脚本
// 使用第一个标签页打开playwright官网
Page page = browserContext.pages().get(0);
page.navigate("https://playwright.dev/");
System.out.println(page.title());
// 新建标签页
Page newPage = browserContext.newPage();
// 打开百度
newPage.navigate("https://www.baidu.com");
System.out.println(newPage.title());
// 输入hubstudio并搜索
newPage.fill("input[name=\"wd\"]", "hubstudio");
newPage.press("input[id=\"su\"]", "Enter");
newPage.waitForLoadState();
}
3.易语言
API示例
示例源码:点击下载
依赖模块文件:点击下载
.版本 2
.支持库 spec
.支持库 shell
.程序集 窗口程序集_启动窗口
.子程序 _启动API服务按钮_被单击
.如果真 (取文本长度 (目录.内容) = 0)
提示框 (“目录不能为空”)
返回 ()
.如果真结束
.如果真 (取反 (文件是否存在 (目录.内容 + “\hubstudio_connector.exe”)))
提示框 (“未找到连接器文件,请确认安装目录是否正确”)
返回 ()
.如果真结束
.如果真 (取文本长度 (APP_ID.内容) = 0)
提示框 (“APP_ID不能为空”)
返回 ()
.如果真结束
.如果真 (取文本长度 (APP_SECRET.内容) = 0)
提示框 (“APP_SECRET不能为空”)
返回 ()
.如果真结束
.如果真 (取文本长度 (GROUP_CODE.内容) = 0)
提示框 (“团队ID不能为空”)
返回 ()
.如果真结束
运行 (目录.内容 + “\hubstudio_connector.exe --remote_debugging” + “ --server_mode=http --app_id=” + APP_ID.内容 + “ --app_secret=” + APP_SECRET.内容 + “ --group_code=” + GROUP_CODE.内容, 假, )
.子程序 _请求_被单击
.局部变量 请求地址, 文本型
.局部变量 参数, 文本型
.如果真 (请求客户.连接 (“127.0.0.1”, 6873) = 假)
提示框 (“连接失败,请先启动API服务”)
返回 ()
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “浏览器环境-打开环境”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/browser/start HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “浏览器环境-关闭环境”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/browser/stop HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-获取环境列表”)
参数 = 到文本 (编码_Ansi到Utf8 (到文本 (请求参数.内容)))
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/list HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (参数)) + #换行符 + #换行符 + 参数
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-创建环境”)
参数 = 到文本 (编码_Ansi到Utf8 (到文本 (请求参数.内容)))
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/create HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (参数)) + #换行符 + #换行符 + 参数
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-更新环境”)
参数 = 到文本 (编码_Ansi到Utf8 (到文本 (请求参数.内容)))
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/update HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (参数)) + #换行符 + #换行符 + 参数
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-更新环境代理”)
参数 = 到文本 (编码_Ansi到Utf8 (到文本 (请求参数.内容)))
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/proxy/update HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (参数)) + #换行符 + #换行符 + 参数
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-删除环境”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/del HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-导入Cookie”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/import-cookie HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-导出Cookie”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/export-cookie HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “环境管理-获取随机UA”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/env/random-ua HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “分组管理-获取环境分组列表”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/group/list HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “分组管理-新建环境分组”)
参数 = 到文本 (编码_Ansi到Utf8 (到文本 (请求参数.内容)))
请求地址 = “POST http://127.0.0.1:6873/api/v1/group/create HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (参数)) + #换行符 + #换行符 + 参数
.如果真结束
.如果真 (到文本 (API列表组合框.内容) = “分组管理-删除环境分组”)
请求地址 = “POST http://127.0.0.1:6873/api/v1/group/del HTTP/1.1” + #换行符 + #POST_请求头 + 到文本 (取文本长度 (请求参数.内容)) + #换行符 + #换行符 + 请求参数.内容
.如果真结束
调试输出 (请求地址)
请求客户.发送数据 (到字节集 (请求地址))
.子程序 子程序1
.子程序 _请求客户_数据到达
结果框.内容 = 编码_Utf8到Ansi (请求客户.取回数据 ())
.子程序 _结果框_内容被改变
请求客户.断开连接 ()
.子程序 _请求客户_连接断开
.子程序 _选择目录按钮_被单击
目录.内容 = 浏览文件夹 (“请选择目录”, 假)
.子程序 _API列表组合框_列表项被选择
调试输出 (到文本 (API列表组合框.内容))