Git Product home page Git Product logo

bas-remote-python's Introduction

bas-remote-python

PyPI version GitHub issues License: MIT

bas-remote-python - Python library, which allows you to automate Google Chrome browser.

In order to make it possible, BrowserAutomationStudio application is used. bas-remote-python allows you to call and control execution of functions created in BAS. Consider following example, you have a BAS function, which executes specified Google search query and returns result as a list of urls. Using this library, you can call that function in any Python application and obtain result. You can distribute applications written with bas-remote-python library as well.

BrowserAutomationStudio

BAS - is application that allows you to automate any activities in Google Chrome browser with a help of visual programming and without knowing of any programming language. You can think of it as IDE created especially for browser automation:

Check following link for more info:

https://bablosoft.com/shop/BrowserAutomationStudio

Installation

pip install bas-remote-python

Quick example

Following code will search for cats query in Google and output result into console. You can just copy paste this code and run it.

import asyncio

from bas_remote import BasRemoteClient
from bas_remote import Options


async def main():
    # Set script name, and optionally auth details (login, password).
    options = Options(script_name='TestRemoteControl')

    # Create client.
    script_client = BasRemoteClient(options)

    # Start application, this may take some time.
    await script_client.start()

    # Set parameters for function.
    script_params = {'Query': 'cats'}

    # Run function and wait for result.
    # Following function will return list of strings.
    result = await script_client.run_function(
        'GoogleSearch',  # or 'YourFunctionName'
        script_params)

    # Iterate and output results.
    for link in result:
        print(link)

    await script_client.close()


if __name__ == '__main__':
    asyncio.run(main())

Checkout wiki for more examples.

Running custom code

Previous example used TestRemoteControl project and GoogleSearch function defined in it. In most cases you want to use your own projects and functions. In order to do it:

  • Install BAS. Download using following link. IMPORTANT You need to be a premium user in order to create project with custom functions.
  • Start record mode and create new function by using function manager. BAS functions works like functions in any other languages. They can be called with parameters and can return value as a result. Functions help to incapsulate and reuse your code.
  • Implement it. On following step you need to implement required functionality. Place code into the function that you have created on previous step. They will be called from Python code later. Function parameters will be sent from Python to BAS, while return value will be sent from BAS to Python. Working with BAS is out of scope of this article, check BAS wiki for more info.
  • Compile it and give it a name. Check this article more more instruction for compilation.
  • Finally, allow remote function execution flag for script must be set. You can do that on following page. See screenshot for more details.

After project with function is prepared, you can use it from Python. In order to do that, change script and function name in example above.

How it works

Following diagram will explain project architecture:

Running custom code section explains how to prepare your project and upload it into the cloud. Portable BAS instance is downloaded and started automatically, it is also closed automatically when BasRemoteClient gets closed. Folder, where portable BAS instance is located by default is data folder relative to executable. It can be customized by using options.working_dir setting.

Project example

You can use TestRemoteControl project in order to test bas-remote-python library. It is already uploaded into the cloud and can be used without authentication. List of available functions:

  • Add(X,Y) - adds two numbers and return their sum.
  • SetProxy(Proxy,IsSocks5) - sets proxy for current thread. Proxy param is proxy string, IsSocks5 is string("true", "false") value indicates if proxy type is socks5. No return value.
  • CheckIp() - returns remote IP of current thread. Uses ip.bablosoft.com service to test. Can be combined with SetProxy function.
  • GoogleSearch(Query) - performs Google query, returns result as a list of urls.

Project source code can be downloaded here

License

bas-remote-python has MIT license.

You can distribute applications using bas-remote-python library, including commercial, to user, who don't have BAS premium subscription without any fees.

In order to create project with custom functions you need to have a BAS premium subscription.

In other words, only developers must have BAS premium subscription, not users.

bas-remote-python's People

Contributors

cheshirecaat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bas-remote-python's Issues

Certificate Error

aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host bablosoft.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)')]

I have this error when I try to start client

Error starting function

File "C:\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete
return future.result()
File "C:\Users\Farella Vito\Desktop\Test\main.py", line 15, in main
await script_client.start()
File "C:\Python310\lib\site-packages\bas_remote\client.py", line 60, in start
await self._engine.start(port)
File "C:\Python310\lib\site-packages\bas_remote\services\engine_service.py", line 61, in start
self._start_engine_process(port)
File "C:\Python310\lib\site-packages\bas_remote\services\engine_service.py", line 102, in _start_engine_process
self._process = subprocess.Popen([
File "C:\Python310\lib\subprocess.py", line 966, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Python310\lib\subprocess.py", line 1435, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] Impossibile trovare il file specificato
Exception ignored in: <function _ProactorBasePipeTransport.del at 0x00000221F549FD90>
Traceback (most recent call last):
File "C:\Python310\lib\asyncio\proactor_events.py", line 116, in del
self.close()
File "C:\Python310\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Python310\lib\asyncio\base_events.py", line 745, in call_soon
self._check_closed()
File "C:\Python310\lib\asyncio\base_events.py", line 510, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.