Skip to content

Commit 4aee542

Browse files
authored
Merge pull request #85 from zazer0/feat/add-login-saving
Implement login caching for Chrome
2 parents afba7d6 + 401c367 commit 4aee542

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@ target/
5858
# appp specific folders
5959
bin/
6060
default_out_path/
61+
_browser_user_data_dir/

echo360/downloader.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from .course import EchoCloudCourse
88
from .echo_exceptions import EchoLoginError
9-
from .utils import naive_versiontuple
9+
from .utils import naive_versiontuple, PERSISTENT_SESSION_FOLDER
1010

1111

1212
from pick import pick
@@ -22,13 +22,21 @@
2222

2323

2424
def build_chrome_driver(
25-
use_local_binary, selenium_version_ge_4100, setup_credential, user_agent, log_path
25+
use_local_binary,
26+
selenium_version_ge_4100,
27+
setup_credential,
28+
user_agent,
29+
log_path,
30+
persistent_session,
2631
):
2732
from selenium.webdriver.chrome.options import Options
2833

2934
opts = Options()
3035
if not setup_credential:
3136
opts.add_argument("--headless")
37+
if persistent_session:
38+
folder_path = PERSISTENT_SESSION_FOLDER # default current dir
39+
opts.add_argument("--user-data-dir={}".format(folder_path))
3240
opts.add_argument("--window-size=1920x1080")
3341
opts.add_argument("user-agent={}".format(user_agent))
3442

@@ -62,8 +70,18 @@ def build_chrome_driver(
6270

6371

6472
def build_firefox_driver(
65-
use_local_binary, selenium_version_ge_4100, setup_credential, user_agent, log_path
73+
use_local_binary,
74+
selenium_version_ge_4100,
75+
setup_credential,
76+
user_agent,
77+
log_path,
78+
persistent_session,
6679
):
80+
if persistent_session:
81+
raise NotImplementedError(
82+
"Save-login not implemented for Firefox! Feel free to make a PR for it..."
83+
)
84+
6785
profile = webdriver.FirefoxProfile()
6886
profile.set_preference("general.useragent.override", user_agent)
6987
kwargs = dict()
@@ -95,8 +113,18 @@ def build_firefox_driver(
95113

96114

97115
def build_phantomjs_driver(
98-
use_local_binary, selenium_version_ge_4100, setup_credential, user_agent, log_path
116+
use_local_binary,
117+
selenium_version_ge_4100,
118+
setup_credential,
119+
user_agent,
120+
log_path,
121+
persistent_session,
99122
):
123+
if persistent_session:
124+
raise NotImplementedError(
125+
"Save-login not implemented for Firefox! Feel free to make a PR for it..."
126+
)
127+
100128
dcap = dict()
101129
dcap.update(DesiredCapabilities.PHANTOMJS)
102130
dcap["phantomjs.page.settings.userAgent"] = (
@@ -128,6 +156,7 @@ def __init__(
128156
use_local_binary=False,
129157
webdriver_to_use="phantomjs",
130158
interactive_mode=False,
159+
persistent_session=False,
131160
):
132161
self._course = course
133162
root_path = os.path.dirname(os.path.abspath(sys.modules["__main__"].__file__))
@@ -175,6 +204,7 @@ def __init__(
175204
setup_credential=setup_credential,
176205
user_agent=self._useragent,
177206
log_path=log_path,
207+
persistent_session=persistent_session,
178208
)
179209

180210
self.setup_credential = setup_credential

echo360/main.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from .echo_exceptions import EchoLoginError
2121
from .downloader import EchoDownloader
2222
from .course import EchoCourse, EchoCloudCourse
23+
from .utils import PERSISTENT_SESSION_FOLDER
2324

2425
_DEFAULT_BEFORE_DATE = datetime(2900, 1, 1).date()
2526
_DEFAULT_AFTER_DATE = datetime(1100, 1, 1).date()
@@ -94,6 +95,17 @@ def handle_args():
9495
any website to obtain credentials needed before proceeding. \
9596
(implies using chrome-driver)",
9697
)
98+
parser.add_argument(
99+
"--persistent-session",
100+
"-P",
101+
action="store_true",
102+
default=False,
103+
dest="persistent_session",
104+
help="Starts a persistent session (helps to store credentials). Session uses \
105+
'{}' folder, and currently only supports chrome driver.".format(
106+
PERSISTENT_SESSION_FOLDER
107+
),
108+
)
97109
parser.add_argument(
98110
"--download-phantomjs-binary",
99111
action="store_true",
@@ -231,6 +243,7 @@ def handle_args():
231243
not args["auto"],
232244
args["alternative_feeds"],
233245
args["echo360cloud"],
246+
args["persistent_session"],
234247
)
235248

236249

@@ -251,6 +264,7 @@ def main():
251264
manual,
252265
alternative_feeds,
253266
usingEcho360Cloud,
267+
persistent_session,
254268
) = handle_args()
255269

256270
setup_logging(enable_degbug)
@@ -344,6 +358,7 @@ def cmd_exists(x):
344358
use_local_binary=use_local_binary,
345359
webdriver_to_use=webdriver_to_use,
346360
interactive_mode=interactive_mode,
361+
persistent_session=persistent_session,
347362
)
348363

349364
_LOGGER.debug(

echo360/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ def naive_versiontuple(v):
44
Expects naive_versiontuple('xx.yy.zz') < naive_versiontuple('aa.bb.cc').
55
"""
66
return tuple(map(int, (v.split("."))))
7+
8+
9+
PERSISTENT_SESSION_FOLDER = "_browser_persistent_session"

0 commit comments

Comments
 (0)