# 脚本示例
# 使用前提
- 通过调用本地接口/browser/open打开浏览器,获取返回参数,然后使用返回参数中的ws字段,连接浏览器,进行自动化操作。
- ws字段示例:"ws://127.0.0.1:59192/devtools/browser/d25b3f5d-21a4-49d2-9eb8-582c67dc4e4d"
- 具体端口、appId、appSecret参数替换成实际参数,该脚本示例仅供学习参考,请以实际运行结果为准
- 预使浏览器使用无头模式,可以在账号环境startupParameter参数添加以下参数
- --headless --remote-debugging-port=0 --remote-debugging-address=127.0.0.1
# 1.Python
# selenium
import requests
import hashlib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# MD5加密函数
def md5_encrypt(data):
md5 = hashlib.md5()
md5.update(data.encode('utf-8'))
return md5.hexdigest()
# 双重MD5加密函数
def double_md5_encrypt(data):
return md5_encrypt(md5_encrypt(data))
# 假设appId和appSecret是已知的常量
appId = 'your_app_id'
appSecret = 'your_app_secret'
# 进行双重MD5加密
signature = double_md5_encrypt(appId + appSecret)
# 准备POST请求的JSON数据
data = {
'id': 'xxx', # 替换为实际的id值
'signature': signature
}
# 调用本地接口获取ws字段,使用POST请求并发送JSON数据
response = requests.post('http://127.0.0.1:55554/browser/open', json=data)
response_data = response.json()
ws_url = response_data['ws'] # 假设返回的JSON中包含ws字段
# 从ws字段中提取端口号
import urllib.parse
parsed_url = urllib.parse.urlparse(ws_url)
port = parsed_url.port
# 配置Selenium WebDriver选项
chrome_options = Options()
chrome_options.add_argument('--remote-debugging-port={}'.format(port))
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:{}".format(port))
# 初始化WebDriver
driver = webdriver.Chrome(options=chrome_options)
# 打开百度
driver.get('https://www.baidu.com')
# ... 在这里添加你的自动化操作 ...
# 关闭浏览器
# driver.quit()
# playwright
import requests
import hashlib
from playwright.sync_api import sync_playwright
# MD5加密函数和双重MD5加密函数保持不变...
# 假设appId和appSecret是已知的常量
appId = 'your_app_id'
appSecret = 'your_app_secret'
# 进行双重MD5加密
signature = double_md5_encrypt(appId + appSecret)
# 准备POST请求的JSON数据
data = {
'id': 'xxx', # 替换为实际的id值
'signature': signature
}
# 调用本地接口获取ws字段,使用POST请求并发送JSON数据
response = requests.post('http://127.0.0.1:55554/browser/open', json=data)
response_data = response.json()
ws_url = response_data['ws'] # 假设返回的JSON中包含ws字段
# 从ws_url中提取端口号(如果需要)
# 使用Playwright连接到已存在的浏览器实例
with sync_playwright() as p:
# 连接到已存在的浏览器实例
browser = p.chromium.connect(ws_url) # 使用ws_url连接
page = browser.new_page() # 创建一个新的页面
page.goto('https://www.baidu.com') # 打开百度
# ... 在这里添加你的自动化操作 ...
# 关闭浏览器
browser.close() # 关闭浏览器实例
# pyppeteer
import requests
import hashlib
import asyncio
from pyppeteer import launch
# MD5加密函数
def md5_encrypt(data):
md5 = hashlib.md5()
md5.update(data.encode('utf-8'))
return md5.hexdigest()
# 双重MD5加密函数
def double_md5_encrypt(data):
return md5_encrypt(md5_encrypt(data))
# 假设appId和appSecret是已知的常量
appId = 'your_app_id'
appSecret = 'your_app_secret'
# 进行双重MD5加密
signature = double_md5_encrypt(appId + appSecret)
# 准备POST请求的JSON数据
data = {
'id': 'xxx', # 替换为实际的id值
'signature': signature
}
# 调用本地接口获取ws字段,使用POST请求并发送JSON数据
response = requests.post('http://127.0.0.1:55554/browser/open', json=data)
response_data = response.json()
ws_url = response_data['ws'] # 假设返回的JSON中包含ws字段
async def main():
# 连接到已运行的浏览器实例
browser = await connect({'browserWSEndpoint': ws_url})
# 创建一个新的页面
page = await browser.newPage()
# 打开百度
await page.goto('https://www.baidu.com')
# ... 在这里添加你的自动化操作 ...
# 关闭浏览器
await browser.close()
# Python 3.7+ 可以直接运行 asyncio.run(main())
# 对于更早的Python版本,你需要创建一个事件循环来运行main()函数
asyncio.get_event_loop().run_until_complete(main())
# 2.Java
# selenium
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SeleniumExample {
// MD5加密函数
public static String md5Encrypt(String data) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(data.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
// 双重MD5加密函数
public static String doubleMd5Encrypt(String data) throws NoSuchAlgorithmException {
return md5Encrypt(md5Encrypt(data));
}
public static void main(String[] args) throws Exception {
// 假设appId和appSecret是已知的常量
String appId = "your_app_id";
String appSecret = "your_app_secret";
// 进行双重MD5加密
String signature = doubleMd5Encrypt(appId + appSecret);
// 准备POST请求的JSON数据
JSONObject json = new JSONObject();
json.put("id", "xxx"); // 替换为实际的id值
json.put("signature", signature);
// 调用本地接口获取ws字段,使用POST请求并发送JSON数据
URL url = new URL("http://127.0.0.1:55554/browser/open");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json; utf-8");
con.setRequestProperty("Accept", "application/json");
con.setDoOutput(true);
con.getOutputStream().write(json.toString().getBytes(StandardCharsets.UTF_8));
// 读取响应
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8));
StringBuilder response = new StringBuilder();
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
JSONObject responseData = new JSONObject(response.toString());
String wsUrl = responseData.getString("ws"); // 假设返回的JSON中包含ws字段
// 从ws字段中提取端口号
String port = wsUrl.split(":")[4]; // 假设ws_url格式为ws://127.0.0.1:端口号/...
// 配置Selenium WebDriver选项
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("debuggerAddress", "127.0.0.1:" + port);
// 初始化WebDriver
WebDriver driver = new ChromeDriver(chromeOptions);
// 打开百度
driver.get("https://www.baidu.com");
// ... 在这里添加你的自动化操作 ...
// 关闭浏览器
// driver.quit();
}
}
# playwright
import com.microsoft.playwright.*;
import org.json.JSONObject;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PlaywrightExample {
// MD5加密函数
public static String md5Encrypt(String data) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(data.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
// 双重MD5加密函数
public static String doubleMd5Encrypt(String data) throws NoSuchAlgorithmException {
return md5Encrypt(md5Encrypt(data));
}
public static void main(String[] args) throws Exception {
// 假设appId和appSecret是已知的常量
String appId = "your_app_id";
String appSecret = "your_app_secret";
// 进行双重MD5加密
String signature = doubleMd5Encrypt(appId + appSecret);
// 准备POST请求的JSON数据
JSONObject json = new JSONObject();
json.put("id", "xxx"); // 替换为实际的id值
json.put("signature", signature);
// 调用本地接口获取ws字段,使用POST请求并发送JSON数据
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("http://127.0.0.1:55554/browser/open"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json.toString()))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
JSONObject responseData = new JSONObject(response.body());
String wsUrl = responseData.getString("ws"); // 假设返回的JSON中包含ws字段
// 使用 Playwright 连接到已运行的浏览器实例
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().connect(wsUrl);
Page page = browser.newPage(); // 创建一个新的页面
// 打开百度
page.navigate("https://www.baidu.com");
// 关闭浏览器
browser.close();
}
}
}
# 3.node
# puppeteer
const puppeteer = require('puppeteer');
const axios = require('axios'); // 使用axios代替requests库
const crypto = require("crypto-js");
// MD5加密函数
function md5Encrypt(data) {
return crypto.MD5(data).toString()
}
// 双重MD5加密函数
function doubleMd5Encrypt(data) {
return md5Encrypt(md5Encrypt(data));
}
(async () => {
// 假设appId和appSecret是已知的常量
const appId = 'your_app_id';
const appSecret = 'your_app_secret';
// 进行双重MD5加密
const signature = doubleMd5Encrypt(appId + appSecret);
// 准备POST请求的JSON数据
const data = {
id: 'xxx', // 替换为实际的id值
signature: signature
};
// 调用本地接口获取ws字段,使用POST请求并发送JSON数据
const response = await axios.post('http://127.0.0.1:55554/browser/open', data);
const wsUrl = response.data.ws; // 假设返回的JSON中包含ws字段
const browser = await puppeteer.connect({
browserWSEndpoint: wsUrl,
defaultViewport: null
})
// 具体业务代码
const page = await browser.newPage()
await page.goto('https://www.baidu.com')
// 关闭浏览器
// await browser.close();
})();
# selenium
const { Builder, By, Key, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const axios = require('axios');
const crypto = require("crypto-js");
// MD5加密函数
function md5Encrypt(data) {
return crypto.MD5(data).toString()
}
// 双重MD5加密函数
function doubleMd5Encrypt(data) {
return md5Encrypt(md5Encrypt(data));
}
(async function example() {
// 假设appId和appSecret是已知的常量
const appId = 'your_app_id';
const appSecret = 'your_app_secret';
// 进行双重MD5加密
const signature = doubleMd5Encrypt(appId + appSecret);
// 准备POST请求的JSON数据
const data = {
id: 'xxx', // 替换为实际的id值
signature: signature
};
// 调用本地接口获取ws字段,使用POST请求并发送JSON数据
const response = await axios.post('http://127.0.0.1:55554/browser/open', data);
const wsUrl = response.data.ws; // 假设返回的JSON中包含ws字段
// 配置 Chrome 选项
let options = new chrome.Options();
options.addArguments('--start-maximized'); // 最大化浏览器窗口
// 创建 WebDriver 实例,连接到远程浏览器
let driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.usingServer(wsUrl) // 使用 WebSocket URL 连接到远程浏览器
.build();
try {
// 打开百度
await driver.get('https://www.baidu.com');
// ... 在这里添加你的自动化操作 ...
} finally {
// 关闭浏览器
// await driver.quit();
}
})();
← API常见问题