Selenium
from datetime import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.remote.webdriver import WebDriver
import time
import rpyc
from rpyc.utils.server import ThreadedServer # or ForkingServer
from bs4 import BeautifulSoup
import json
def send(driver, cmd, params={}):
resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
url = driver.command_executor._url + resource
body = json.dumps({'cmd': cmd, 'params': params})
response = driver.command_executor._request('POST', url, body)
# if response['status']:
# raise Exception(response.get('value'))
return response.get('value')
def add_script(driver, script):
send(driver, "Page.addScriptToEvaluateOnNewDocument", {"source": script})
def init_webdriver():
WebDriver.add_script = add_script
dir_path = os.path.dirname(os.path.realpath(__file__))
options = webdriver.ChromeOptions()
# options.add_argument("--user-data-dir=/home/jared/.config/google-chrome/")
# options.add_argument('--profile-directory="Profile 1"')
options.add_argument('--disable-web-security')
options.add_argument('--allow-running-insecure-content')
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome( chrome_options=options)
return driver
#global driver
class MyService(rpyc.Service):
def process(self,url):
self.driver.add_script('const setProperty = () => { Object.defineProperty(navigator, "webdriver", { get: () => false, }); }; setProperty();')
print('add url.............')
print(self.driver)
def __init__(self):
self.driver = None
try:
self.driver = init_webdriver()
print(self.driver )
except Exception as e:
raise e
finally:
True
pass
def exposed_get_url(self,url):
self.driver.add_script('const setProperty = () => { Object.defineProperty(navigator, "webdriver", { get: () => false, }); }; setProperty();')
print('add url.............')
print(self.driver)
self.driver.get(url)
# txt=self.driver.find_element_by_xpath("//div[@id='json']").text
print(self.driver.page_source)
soup = BeautifulSoup(self.driver.page_source,features="lxml")
dict_from_json = json.loads(soup.find("body").text)
return dict_from_json
# return json.loads(self.driver.page_source)
if __name__ == "__main__":
server = ThreadedServer(MyService(), port = 12345,protocol_config={
'allow_public_attrs': True,
})
server.start()