mail-sync/proton.py

64 lines
2.8 KiB
Python
Raw Normal View History

2023-10-09 21:07:55 -05:00
from selenium import webdriver
from selenium.webdriver.common.by import By
from common import MailProvider, MailMessage
import json
from time import sleep
class ProtonWebmail(MailProvider):
xpaths = {
"username_box": "/html/body/div[1]/div[4]/div[1]/main/div[1]/div[2]/form/div[2]/div[1]/div/div/input",
"password_box": "/html/body/div[1]/div[4]/div[1]/main/div[1]/div[2]/form/div[3]/div[1]/div/div[1]/input",
"sign_in": "/html/body/div[1]/div[4]/div[1]/main/div[1]/div[2]/form/button",
"messages": "/html/body/div[1]/div[3]/div/div[2]/div/div[2]/div/div/div/main/div/div/div/div/div/div[2]/div[2]",
"messagebody": "/html/body/div[1]/div[3]/div/div[2]/div/div[2]/div/div/div/main/div/div/section/div/div[3]/div/div/article/div[2]",
"backbutton": "//*[text()[contains(., 'Back')]]",
}
2023-10-09 21:07:55 -05:00
def transform_message_header(self, header):
return header.replace('\n', ' - ').replace('Unread email - ', '')
def get(self):
self.messages_failed = 0
self.get_seen_messages()
self._get_webdriver()
self.webdriver.get("https://account.proton.me/login")
self._wait_for_elem(self.xpaths["username_box"])
2023-10-09 21:07:55 -05:00
sleep(0.5)
self._type_in_elem(self.xpaths["username_box"], self.username)
self._click_elem(self.xpaths["password_box"])
self._type_in_elem(self.xpaths["password_box"], self.password)
self._click_elem(self.xpaths["sign_in"])
self._wait_for_elem(self.xpaths["messages"])
for i in self._get_elem_children(self._to_elem(self.xpaths["messages"])):
index = self.transform_message_header(i.text)
if not self.is_seen(index):
2023-10-09 21:07:55 -05:00
text = i.text
# we can interact with it, just selenium doesn't like it
try:
self._click_elem(i)
except ElementNotInteractableException:
pass
self._wait_for_elem(self.xpaths["messagebody"])
2023-10-09 21:07:55 -05:00
sleep(5)
self.webdriver.switch_to.frame(
self._to_elem(self.xpaths["messagebody"]) \
.find_elements(By.XPATH, "//iframe")[0]
)
splitted = index.split(' - ')
2023-10-09 21:07:55 -05:00
message = MailMessage(
index = self.transform_message_header(text),
sender = splitted[0],
subject = splitted[3],
maintext = self.webdriver.page_source,
2023-10-09 21:07:55 -05:00
)
self.add_to_seen(message)
self.webdriver.switch_to.default_content()
sleep(2)
self._click_elem(self.xpaths["backbutton"])
2023-10-09 21:07:55 -05:00
sleep(2)
self.write_seen_messages()
self.webdriver.quit()
return self.seen_messages