Selenium browser automation

Browser automation allows you to automate tasks in MuLogin's browser configuration file. From creating simple automated scripts to complex web crawlers, you can search, collect and interact with web data.

MuLogin browser automation is based on Selenium WebDriver.

Normally, if you run Selenium code, you need to connect to the Chrome driver first and then set up the functions you need. You don’t need this step when using MuLogin with Selenium code. You will use the Remote Web Driver program to connect to the MuLogin application or a browser configuration file through a local port, set up the required functions, and execute Selenium commands in a predefined browser configuration file.

Languages

The Selenium framework provides multiple languages that can be used together, so MuLogin automation can also run on multiple coding languages. But at present, we only provide technical support for Java and Python.

Use Selenium in MuLogin

Define MuLogin port

You need to define the software port in advance to use Selenium automation. Here is how to define the port:

In "System settings" -> “Browser Settings” -> Turn on the “Launch browser automation configuration” button, and set the usable port in the open port. The default value is 30725, you can also set an access password. Then, you can connect to MuLogin through the defined port.

The interface can also pass in the proxy server information. If the incoming proxy information will overwrite the proxy information in the configuration file, this overwriting is temporary and will not really modify the configuration file. It is only valid for the automation interface:

http://127.0.0.1:30725/api/v1/profile/start?skiplock=true&profileId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&proxytype=socks5&proxyserver=ip&proxyport=1080&proxyusername=&proxypassword=

There are four types of proxies:

proxytype=http
proxytype=https
proxytype=socks4
proxytype=socks5

The proxy username and password can be left blank.


Python Case: (After installing Python, use cmd first to enter the Python\Scripts directory, then run pip install selenium and pip install requests):


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?skiplock=true&profileId='+mla_profile_id

resp = requests.get(mla_url)
json = resp.json()

#Determine the return status of json. If it's ERROR, terminate the process and prompt an error message.
errorcode='ERROR'

statuscode=json['status'] #json return status

if errorcode==statuscode:
    print(json['value']) #print the error information
    quit() #terminate the program
    
print(json['value'])

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", json['value'][7:])
chrome_driver = r"chromedriver.exe" 
#https://v.mulogin.com/down/core/109.0.5414.75.zip
#download the chromedriver file and place it in the python directory
driver = webdriver.Chrome(chrome_driver, options=chrome_options)

driver.get('https://www.bing.com/')
executor_url = driver.command_executor._url
session_id = driver.session_id
print(executor_url)
print(session_id)
print('ok it is done')

driver.quit()


Python Case: (The following code is required for using selenium version 4, while the previous code will cause an error in selenium version 4.)


from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager


mla_profile_id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
mla_url = 'http://127.0.0.1:30725/api/v1/profile/start?skiplock=true&profileId='+mla_profile_id

resp = requests.get(mla_url)
json = resp.json()


#Determine the return status of json. If it's ERROR, terminate the process and prompt an error message.
errorcode='ERROR'

statuscode=json['status'] #json return status

if errorcode==statuscode:
    print(json['value']) #print the error information
    quit() #terminate the program
    
print(json['value'])

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", json['value'][7:])

service = ChromeService(executable_path=json['chromedriver'])

driver = webdriver.Chrome( service=service ,options=chrome_options)

driver.get('https://www.bing.com/')
executor_url = driver.command_executor._url
session_id = driver.session_id
print(executor_url)
print(session_id)
print('ok it is done')

#driver.quit()

The chromedriver file is available in each kernel installation directory, and the API to start the browser interface /api/v1/profile/start will also return the full path location of the chromedriver file.

Selenium antidetect can be set in Browser profile settings -> Other Configurations -> Customize Launch Browser Parameters to include "--disable-blink-features=AutomationControlled", which will have a certain effect.

Please pay attention to the kernel version of the MuLogin browser:

If the kernel version is 109, download this one:

https://v.mulogin.com/down/core/109.0.5414.75.zip

If the kernel version is 113, download this one:

https://v.mulogin.com/down/core/113.0.5672.64.zip

If the chromedriver version is not corresponding, it will cause failed automation.

If you cannot close the browser, you can use http://127.0.0.1:30725/api/v1/profile/stop?profileId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx interface to close the browser process of the specified configuration.

If you can only open the browser when running the code, but cannot open the website, you may copy and paste the chromedriver.exe to your python installation directory, or you select the mobile emulation mode which may cause this problem.