· 6 years ago · Mar 12, 2019, 09:40 PM
1class Capturer:
2 def __init__(self) -> None:
3 self.start_driver()
4 self.lock = Lock()
5
6 def start_driver(self) -> None:
7 chrome_options = Options()
8 chrome_options.add_argument('--headless')
9 chrome_options.add_argument('--no-sandbox')
10 chrome_options.add_argument('--disable-dev-shm-usage')
11 #chrome_options.binary_location = os.getenv('GOOGLE_CHROME_BIN')
12
13 self.drv = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
14
15 self.drv.set_window_size(1280, 1024)
16 self.drv.implicitly_wait(5)
17 self.auth()
18
19 def reboot(self) -> None:
20 self.drv.close()
21 self.start_driver()
22
23 @staticmethod
24 def check_url(url: str) -> None:
25 spl = urlsplit(url)
26 if not (spl.netloc in ('n.maps.yandex.ru', 'mapeditor.yandex.com') or
27 spl.netloc == 'yandex.ru' and spl.path.startswith('/maps')):
28 raise IllegalURL
29
30 def take_screenshot(self, url: str) -> BytesIO:
31 self.lock.acquire()
32 try:
33 self.check_url(url)
34 self.drv.get(url)
35 self.drv.refresh()
36 sleep(6)
37 except WebDriverException as e:
38 print(e)
39 self.reboot()
40 finally:
41 self.lock.release()
42 return BytesIO(self.drv.get_screenshot_as_png())
43
44 def auth(self):
45 self.drv.get('https://passport.yandex.ru/auth')
46 user_name = self.drv.find_element_by_id("passp-field-login")
47 user_name.send_keys("login")
48 user_name.send_keys (u'\ue007')
49 password = self.drv.find_element_by_id("passp-field-passwd")
50 password.send_keys("password")
51 password.send_keys (u'\ue007')
52
53 def __del__(self) -> None:
54 self.drv.close()