sel_server.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from datetime import datetime
  2. import os
  3. import sys
  4. from selenium import webdriver
  5. from selenium.webdriver.common.by import By
  6. from selenium.webdriver.support.ui import WebDriverWait, Select
  7. from selenium.webdriver.support import expected_conditions as EC
  8. from selenium.webdriver.common.keys import Keys
  9. from selenium.webdriver.remote.webdriver import WebDriver
  10. import time
  11. import rpyc
  12. from rpyc.utils.server import ThreadedServer # or ForkingServer
  13. from bs4 import BeautifulSoup
  14. import json
  15. def send(driver, cmd, params={}):
  16. resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
  17. url = driver.command_executor._url + resource
  18. body = json.dumps({'cmd': cmd, 'params': params})
  19. response = driver.command_executor._request('POST', url, body)
  20. # if response['status']:
  21. # raise Exception(response.get('value'))
  22. return response.get('value')
  23. def add_script(driver, script):
  24. send(driver, "Page.addScriptToEvaluateOnNewDocument", {"source": script})
  25. def init_webdriver():
  26. WebDriver.add_script = add_script
  27. dir_path = os.path.dirname(os.path.realpath(__file__))
  28. options = webdriver.ChromeOptions()
  29. options.add_argument("--user-data-dir=/home/jared/.config/google-chrome/")
  30. options.add_argument('--profile-directory="Profile 1"')
  31. driver = webdriver.Chrome( chrome_options=options)
  32. return driver
  33. #global driver
  34. class MyService(rpyc.Service):
  35. def process(self,url):
  36. self.driver.add_script('const setProperty = () => { Object.defineProperty(navigator, "webdriver", { get: () => false, }); }; setProperty();')
  37. print('add url.............')
  38. print(self.driver)
  39. def __init__(self):
  40. self.driver = None
  41. try:
  42. self.driver = init_webdriver()
  43. print(self.driver )
  44. except Exception as e:
  45. raise e
  46. finally:
  47. True
  48. pass
  49. def exposed_get_url(self,url):
  50. self.driver.add_script('const setProperty = () => { Object.defineProperty(navigator, "webdriver", { get: () => false, }); }; setProperty();')
  51. print('add url.............')
  52. print(self.driver)
  53. self.driver.get(url)
  54. # txt=self.driver.find_element_by_xpath("//div[@id='json']").text
  55. print(self.driver.page_source)
  56. soup = BeautifulSoup(self.driver.page_source,features="lxml")
  57. dict_from_json = json.loads(soup.find("body").text)
  58. return dict_from_json
  59. # return json.loads(self.driver.page_source)
  60. if __name__ == "__main__":
  61. server = ThreadedServer(MyService(), port = 12345,protocol_config={
  62. 'allow_public_attrs': True,
  63. })
  64. server.start()