脚本示例(http模式)

使用前提:已使用命令行唤起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列表组合框.内容))


2024-09-18
5 13