使用示例

Updated by MoreLogin

  1. 启动MoreLogin并登录成功,然后在使用API​​时保持登录状态。
  2. 进入环境管理 > API 查看API接口成功状态。
  1. 获取API地址;端口号;和 API 页面中的 API Key。
  1. 使用“获取浏览器列表”接口获取浏览器列表,也可以直接复制浏览器 ID。到“环境管理”部分,单击操作列中的“更多”按钮,然后从下拉菜单中选择“复制 环境ID”选项。
# python3
# pip install requests
import requests
import pprint

headers = {
'x-api-key': 'c7d3b3d1-af9d-4359-8adf-632c2715704a',
}
params = {
"page": 1,
"page_size": 10,
}
res = requests.get("http://local.morelogin.com:25520/profile/list", params=params, headers=headers)
data = res.json()
pprint.pprint(data)

  1. 假设您在第四步中获取到的浏览器 ID 为“26841222374912”,则可以使用启动浏览器 API 来启动浏览器。

python示例请参考以下脚本:

# python3
# pip install requests
import requests
import pprint

headers = {
'x-api-key': 'c7d3b3d1-af9d-4359-8adf-632c2715704a',
}
payload = {
"id": 26868295929665,
}
res = requests.post("http://local.morelogin.com:25520/profile/start/browser", json=payload, headers=headers)
data = res.json()
pprint.pprint(data)

JavaScript示例请参考以下脚本:

import axios from "axios";
import puppeteer from "puppeteer-core";

const API_KEY = "***58f-b74d-4fb3-943e-e4f11e739da7";
const API_URL = "http://local.morelogin.com:25520";

async function start(api_url: string, api_key: string, profile_id: number) {
console.log(`Start profile :>> api_url=${api_url}, profile_id=${profile_id}`);
const resp = await axios.post(
api_url + "/profile/start/browser",
{
id: profile_id,
},
{
headers: {
"x-api-key": api_key,
},
}
);
console.log("resp :>> ", resp.data);
let data = resp.data;
if (data.ret != 0) {
console.log("Start fail :>> ", data);
return;
}
const body = data.data;

const version = await axios.get(`${body.webdriver_url}/json/version`);
const driver = await puppeteer.connect({
browserWSEndpoint: version.data.webSocketDebuggerUrl,
});
// Open tab
const page = await driver.newPage();
await page.goto("https://morelogin.com");

console.log(">> Start success");
}

// Parameters
const profile_id = 27048731904685;
// Run
start(API_URL, API_KEY, profile_id);

  1. 假设您已在第五步中成功启动浏览器,您现在可以检索与该浏览器配置文件关联的 Webdriver 端口号。这将允许您使用 Selenium 或 Puppeteer 等工具执行自动浏览器操作。
{
"ret": 0,
"data": {
"webdriver_url": "http://localhost:46300",
"port": 46300
}
}

如果您需要使用WebDriver模式,请务必在“设置”-“本地设置”菜单中启用“调试端口”开关。

  1. 以下是运行webdriver的示例(远程端口号应以实际获取的端口号为准):
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time


def open_profile(api_key, profile_id):
headers = {
"x-api-key": api_key,
}
payload = {
"id": profile_id,
}
res = requests.post(
"http://local.morelogin.com:25520/profile/start/browser",
json=payload,
headers=headers,
)
print(res.json())
data = res.json()["data"]
return data["core_type"], data["port"], data["version"]


def stop_profile(api_key, profile_id):
headers = {
"x-api-key": api_key,
}
payload = {
"id": profile_id,
}
res = requests.post(
"http://local.morelogin.com:25520/profile/stop/browser",
json=payload,
headers=headers,
)
data = res.json()
print(data)


def get_driver(core_type, port, version):
if core_type == 0:
opts = webdriver.ChromeOptions()
opts.set_capability("browserVersion", str(version))
opts.add_experimental_option("debuggerAddress", f"127.0.0.1:{port}")
driver = webdriver.Chrome(options=opts)
else:
raise Exception()
return driver


def test_webdriver(driver):
# time.sleep(5)
driver.switch_to.new_window("tab")
driver.get("https://www.selenium.dev/selenium/web/web-form.html")

title = driver.title
assert title == "Web form"

driver.implicitly_wait(0.5)

text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")

text_box.send_keys("Selenium")
submit_button.click()

message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"

driver.quit()


if __name__ == "__main__":
api_key = "c7d3b3d1-af9d-4359-8adf-632c2715704a"
# profile_id = 26868295929665
profile_id = 26871691303507
core_type, port, version = open_profile(api_key, profile_id)
print(core_type, port, version)
time.sleep(10)
driver = get_driver(core_type, port, version)
test_webdriver(driver)
stop_profile(api_key, profile_id)


How did we do?