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)化操作。

拉力貓指紋瀏覽器如何結(jié)合使用puppeteer


三、支持所有語(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");
    }
}