Your Name 4 tahun lalu
induk
melakukan
91f8dd6a92
2 mengubah file dengan 88 tambahan dan 0 penghapusan
  1. 2 0
      README.md
  2. 86 0
      dev/selenium.md

+ 2 - 0
README.md

@@ -16,6 +16,8 @@
 * [Telegram Bot](/dev/telegram.md)
 * [SQLite](/dev/sqlite.md)
 * [NetworkX](/dev/networkx.md)
+* [rpyc](/dev/rpyc.md)
+* [selenium](/dev/selenium.md)
   
 ## Windows Environment
 

+ 86 - 0
dev/selenium.md

@@ -0,0 +1,86 @@
+# 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()
+
+```