Local REST API 自動(dòng)化接口
最后更新于:2024-02-18 11:07:58
一、簡(jiǎn)介
瀏覽器自動(dòng)化允許您在拉力貓指紋瀏覽器配置文件中自動(dòng)執(zhí)行任務(wù),支持Local API接口功能,通過(guò)程序化方式,讀寫賬號(hào)配置信息、啟動(dòng)和關(guān)閉瀏覽器、查詢賬號(hào)列表、配置代理IP等。
API 接口中文版本 文檔詳見:拉力貓 REST API 接口文檔
二、拉力貓指紋瀏覽器自動(dòng)化基于Selenium WebDriver,同時(shí)也支持Puppeteer等自動(dòng)化框架
通常情況下,如果您運(yùn)行Selenium代碼,首先將連接到Chrome驅(qū)動(dòng),然后設(shè)置您所需要的功能。而將拉力貓與Selenium代碼結(jié)合使用時(shí),您無(wú)需這樣操作。您將使用Web Driver程序,通過(guò)本地端口連接到拉力貓應(yīng)用或某瀏覽器配置文件,設(shè)置所需功能,在預(yù)定義的瀏覽器配置文件中執(zhí)行Selenium命令。
當(dāng)然你也可以脫離 Selenium 和 Puppeteer 自動(dòng)化框架,可以直接調(diào)用我們的API來(lái)執(zhí)行自動(dòng)化操作。
三、支持所有語(yǔ)言編寫:
拉力貓API支持任何語(yǔ)言,本教程的最下面有Python和Java的案例。
四、在 拉力貓瀏覽器 中使用:
1、定義拉力貓客戶端地址和端口
您需要提前定義軟件端口以使用自動(dòng)化。以下是定義端口的方法:

在軟件界面右上右上角的【設(shè)置】按鈕圖標(biāo),進(jìn)入后打開【啟用瀏覽器自動(dòng)化設(shè)置】,并在監(jiān)聽端口中設(shè)置能使用端口,這里默認(rèn)是30725,另外你也可以設(shè)置一個(gè)訪問(wèn)密碼。隨后,您就可以通過(guò)定義的端口連接到拉力貓指紋瀏覽器了。
2、綁定服務(wù)器API令牌

3、注意一下拉力貓指紋瀏覽器內(nèi)核版本:
如果是96,就下載Python
http://chromedriver.storage.googleapis.com/96.0.4664.45/chromedriver_win32.zip
如果是98,就下載Python
http://chromedriver.storage.googleapis.com/98.0.4758.80/chromedriver_win32.zip
chromedriver 版本不對(duì)應(yīng),會(huì)造成自動(dòng)化失敗。
如果不能關(guān)閉瀏覽器,可以使用 http://127.0.0.1:30725/api/v1/profile/stop?profileId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 接口來(lái)關(guān)閉指定配置的瀏覽器進(jìn)程。
如果你運(yùn)行代碼只能打開拉力貓瀏覽器,并沒(méi)有打開網(wǎng)站,那可能要把chromedriver.exe復(fù)制到你的 python 安裝目錄里了,還有一種可能是你選了移動(dòng)仿真模式。
4、接口還可以傳入代理服務(wù)器信息,如果傳入代理信息會(huì)覆蓋配置文件里的代理信息,這種覆蓋是臨時(shí)性的,不會(huì)真的修改配置文件,只對(duì)自動(dòng)化接口有效:Markup
http://127.0.0.1:30725/api/v1/profile/start?automation=true&profileId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&proxytype=socks5&proxyserver=ip&proxyport=1080&proxyusername=&proxypassword=
C++
代理類型可能是這4種:
proxytype=socks5
proxytype=socks4
proxytype=http
proxytype=https
代理用戶名和密碼可以不傳為空。
五、Python 案例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
mla_profile_id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
mla_url = 'http://127.0.0.1:30725/api/v1/profile/start?automation=true&profileId='+mla_profile_id
resp = requests.get(mla_url)
json = resp.json()
print(json['value'])
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", json['value'][7:])
chrome_driver = r"chromedriver.exe"
#http://chromedriver.storage.googleapis.com/79.0.3945.36/chromedriver_win32.zip
#下載 chromedriver 文件放到python目錄
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
driver.get('http://www.szkinghigh.cn/')
executor_url = driver.command_executor._url
session_id = driver.session_id
print(executor_url)
print(session_id)
print('ok it is done')
driver.quit()
六、JAVA 案例:
package com.ruoyi.common.spider.reptile;
import cn.hutool.json.JSONObject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @author lalimao
* <dependency>
* <groupId>org.seleniumhq.selenium</groupId>
* <artifactId>selenium-java</artifactId>
* <version>3.141.59</version>
* </dependency>
*/
public class ProductChrome {
public static void main(String[] args) throws Exception {
ProductChrome pc = new ProductChrome();
String profileId = UUID.randomUUID().toString();
//根據(jù)profileId打開并獲取遠(yuǎn)程調(diào)試地址
URL url = new URL(pc.startProfile("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
//使用遠(yuǎn)程調(diào)試地址連接到打開的chrome瀏覽器
System.setProperty("webdriver.chrome.driver", "D:\\lalimao\\chrome\\90.0.4430.85\\chromedriver.exe");//指到驅(qū)動(dòng)位置
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("debuggerAddress", url.getAuthority());
WebDriver driver = new ChromeDriver(chromeOptions);
//訪問(wèn)lalimao
driver.get("http://www.szkinghigh.cn/");
System.out.println(driver.getTitle());
driver.quit();
}
private String startProfile(String profileId) throws Exception {
String url = "http://127.0.0.1:30725/api/v1/profile/start?automation=true&profileId=" + profileId;
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject jsonResponse = new JSONObject(response.toString());
return jsonResponse.getStr("value");
}
}