Clicky

Selenium浏览器自动化

Updated 4/6/19 by Daniel

浏览器自动化允许您在Multilogin的浏览器配置文件中自动执行任务。从创建简单的自动化脚本到复杂的Web爬虫,可以搜索、收集Web数据并与之交互。

Multilogin浏览器自动化基于Selenium WebDriver

通常情况下,如果您运行Selenium代码,首先将连接到Firefox(Gecko)或Chrome驱动,然后设置您所需要的功能。而将Multilogin与Selenium代码结合使用时,您无需这样操作。您将使用Remote Web Driver程序,通过本地端口连接到Multilogin应用或某浏览器配置文件,设置所需功能,在预定义的浏览器配置文件中执行Selenium命令。

支持的语言

由于Selenium框架提供了多种语言绑定,因此Multilogin自动化也可以在多种编码语言上运行。但是目前,我们仅为Java和ython供技术支持。

在 Multilogin 3.X中使用Selenium

定义Multilogin端口

在Multilogin 3.x和4.x版本中,您需要提前定义软件端口,以使用Selenium自动化。以下是定义端口的方法:

  1. 前往C:\Users\%username%\.multiloginapp.com路径并打开app.properies文件
  2. 添加此语句: multiloginapp.port=[PORT_NUMBER]
  3. 保存 app.properties 文件

随后,您就可以通过定义的端口连接到Multiogin了。

Java 案例 :
import org.junit.Assert;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.RemoteWebDriver;

import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class BrowserProfile {
public static void main(String[] args) throws Exception {
BrowserProfile bp = new BrowserProfile();
//TODO replace with existing profile ID. Define the ID of the browser profile, where the code will be executed.
String profileId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

//Define DesiredCapabilities
DesiredCapabilities dc = new DesiredCapabilities();

//Instantiate the Remote Web Driver to connect to the browser profile launched by startProfile method
RemoteWebDriver driver = new RemoteWebDriver(new URL(bp.startProfile(profileId)), dc);

//Perform automation
driver.get("https://multilogin.com/");
Assert.assertEquals("Multilogin - Replace Multiple Computers With Virtual Browser Profiles - Multilogin",driver.getTitle());
driver.quit();
}

private String startProfile(String profileId) throws Exception {
/*Send GET request to start the browser profile by profileId. Returns response in the following format:
'{"status":"OK","value":"http://127.0.0.1:XXXXX"}', where XXXXX is the localhost port on which browser profile is
launched. Please make sure that you have Multilogin listening port set to 35000. Otherwise please change the port
value in the url string*/
String url = "http://127.0.0.1:35000/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();

//Get JSON text from the response and return the value by key "value"
JSONObject jsonResponse = new JSONObject(response.toString());
return jsonResponse.getString("value");
}
}
Python 案例: 
from selenium import webdriver
from selenium.webdriver.firefox import options
import requests

#TODO replace with existing profile ID. Define the ID of the browser profile, where the code will be executed.
mla_profile_id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

mla_url = 'http://127.0.0.1:35000/api/v1/profile/start?automation=true&profileId='+mla_profile_id

"""
Send GET request to start the browser profile by profileId. Returns response in the following format: '{"status":"OK","value":"http://127.0.0.1:XXXXX"}', where XXXXX is the localhost port on which browser profile is launched. Please make sure that you have Multilogin listening port set to 35000. Otherwise please change the port value in the url string
"""
resp = requests.get(mla_url)

json = resp.json()

#Define DesiredCapabilities
opts = options.DesiredCapabilities()

#Instantiate the Remote Web Driver to connect to the browser profile launched by previous GET request
driver = webdriver.Remote(command_executor=json['value'], desired_capabilities={})

#Perform automation
driver.get('https://multilogin.com/')
assert "Multilogin - Replace Multiple Computers With Virtual Browser Profiles - Multilogin" in driver.title
driver.quit()

在 Multilogin 2.X使用Selenium

Java 案例:
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import org.apache.http.client.utils.URIBuilder;
import java.net.URI;

public class BrowserAutomationRemoteWebDriverSample {
public void simpleTest() throws Exception {
//TODO replace with existing profile ID. Define the ID of the browser profile, where the code will be executed.
String profileId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

//Define Multilogin local port
int mlaClientPort = 35000;

//Define the URL where the Remote Web Driver should connect to Multilogin
URI url = new URIBuilder("http://127.0.0.1:" + mlaClientPort + "/api/v1/webdriver").build();

//Set desired capabilities to connect to a pre-defined browser profile
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("multiloginapp-profileId", profileId);

//Instantiate the Remote Web Driver to connect to a Multiloginapp local connection
RemoteWebDriver driver = new RemoteWebDriver(url.toURL(), dc);

//Perform automation
driver.get("https://multilogin.com/");
Assert.assertEquals("Multilogin - Replace Multiple Computers With Virtual Browser Profiles - Multilogin",driver.getTitle());
driver.quit();
}
}
Python 案例:
from selenium import webdriver

#TODO replace with existing profile ID. Define the ID of the browser profile, where the code will be executed.
mla_profile_id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

#Define Multilogin local port
mla_port = '35001'

#Define the URL where the Remote Web Driver should connect to
mla_url = 'http://127.0.0.1:' + mla_port + '/api/v1/webdriver'

#Set desired capabilities to connect to a pre-defined browser profile and instantiate the Remote Web Driver to connect to a Multilogin local connection
driver = webdriver.Remote(command_executor=mla_url, desired_capabilities={'multiloginapp-profileId': mla_profile_id})

#Perform automation
driver.get('https://multilogin.com/')
assert "Multilogin - Replace Multiple Computers With Virtual Browser Profiles - Multilogin" in driver.title
driver.quit()


How did we do?