Skip to content

Commit 08e8cd3

Browse files
committed
Removed Firefox and Safari support
1 parent 4a7128a commit 08e8cd3

File tree

4 files changed

+39
-49
lines changed

4 files changed

+39
-49
lines changed

README.md

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ with teslapy.Tesla('[email protected]', authenticator=custom_auth) as tesla:
153153

154154
#### selenium
155155

156-
Example using selenium to automate web browser interaction.
156+
Example using selenium to automate web browser interaction. The SSO page returns a 403 when `navigator.webdriver` is set and currently only Chrome, Opera and Edge Chromium can prevent this.
157157

158158
```python
159159
import teslapy
@@ -349,8 +349,6 @@ As of September 3, 2021, Tesla has added ReCaptcha to the login form. This cause
349349

350350
As of January 12, 2022, Tesla has deprecated the use of [RFC 7523](https://tools.ietf.org/html/rfc7523) tokens and requires the SSO tokens to be used for API access. If you get a `requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://owner-api.teslamotors.com/api/1/vehicles` and you are using correct credentials then you are probably using an old version of this module.
351351

352-
As of March 1, 2022, Tesla no longer supports the login_hint parameter in the V3 authorization URL. If you get a `requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://auth.tesla.com/oauth2/v3/authorize` then you are probably using an old version of this module.
353-
354352
## Demo applications
355353

356354
The source repository contains three demo applications that *optionally* use [pywebview](https://pypi.org/project/pywebview/) version 3.0 or higher or [selenium](https://pypi.org/project/selenium/) version 3.13.0 or higher to automate weblogin. Selenium 4.0.0 or higher is required for Edge Chromium.
@@ -361,7 +359,7 @@ The source repository contains three demo applications that *optionally* use [py
361359
usage: cli.py [-h] -e EMAIL [-f FILTER] [-a API [KEYVALUE ...]] [-k KEYVALUE]
362360
[-c COMMAND] [-t TIMEOUT] [-p PROXY] [-R REFRESH] [-U URL] [-l]
363361
[-o] [-v] [-w] [-g] [-b] [-n] [-m] [-s] [-d] [-r] [-S] [-H] [-V]
364-
[-L] [-u] [--chrome] [--edge] [--firefox] [--opera] [--safari]
362+
[-L] [-u] [--chrome] [--opera] [--edge]
365363
366364
Tesla Owner API CLI
367365
@@ -394,10 +392,8 @@ optional arguments:
394392
-L, --logout clear token from cache and logout
395393
-u, --user get user account details
396394
--chrome use Chrome WebDriver
397-
--edge use Edge WebDriver
398-
--firefox use Firefox WebDriver
399395
--opera use Opera WebDriver
400-
--safari use Safari WebDriver
396+
--edge use Edge WebDriver
401397
```
402398

403399
Example usage of [cli.py](https://github.com/tdorssers/TeslaPy/blob/master/cli.py):
@@ -709,7 +705,3 @@ Make sure you have [Python](https://www.python.org/) 2.7+ or 3.5+ installed on y
709705
and install [ChromeDriver](https://sites.google.com/chromium.org/driver/) to use Selenium or on Ubuntu as follows:
710706

711707
`sudo apt-get install python3-requests-oauthlib python3-geopy python3-webview python3-selenium python3-websocket`
712-
713-
If you prefer Firefox, install [GeckoDriver](https://github.com/mozilla/geckodriver/releases) or on Ubuntu as follows:
714-
715-
`sudo apt-get install firefox-geckodriver`

cli.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,11 @@ def on_loaded():
3333
webview.start()
3434
return result[0]
3535
# Use selenium to control specified web browser
36-
# Prevent Selenium from being detected (works for Chrome and Edge only, for now)
37-
if args.web < 2:
38-
options = [webdriver.chrome, webdriver.edge][args.web].options.Options()
39-
options.add_argument("--disable-blink-features=AutomationControlled")
40-
else:
41-
options = None
42-
with [webdriver.Chrome, webdriver.Edge, webdriver.Firefox, webdriver.Opera,
43-
webdriver.Safari][args.web](options=options) as browser:
36+
options = [webdriver.chrome, webdriver.opera,
37+
webdriver.edge][args.web].options.Options()
38+
options.add_argument('--disable-blink-features=AutomationControlled')
39+
with [webdriver.Chrome, webdriver.Opera,
40+
webdriver.Edge][args.web](options=options) as browser:
4441
logging.info('Selenium opened %s', browser.capabilities['browserName'])
4542
browser.get(url)
4643
WebDriverWait(browser, 300).until(EC.url_contains('void/callback'))
@@ -168,10 +165,13 @@ def main():
168165
parser.add_argument('-u', '--user', action='store_true',
169166
help='get user account details')
170167
if webdriver:
171-
for c, s in enumerate(('chrome', 'edge', 'firefox', 'opera', 'safari')):
172-
d, h = (0, ' (default)') if not webview and c == 0 else (None, '')
173-
parser.add_argument('--' + s, action='store_const', dest='web',
174-
help='use %s WebDriver' % s.title() + h,
175-
const=c, default=d)
168+
h = 'use Chrome browser' if webview else 'use Chrome browser (default)'
169+
parser.add_argument('--chrome', action='store_const', dest='web',
170+
help=h, const=0, default=None if webview else 0)
171+
parser.add_argument('--opera', action='store_const', dest='web',
172+
help='use Opera browser', const=1)
173+
if hasattr(webdriver.edge, 'options'):
174+
parser.add_argument('--edge', action='store_const', dest='web',
175+
help='use Edge browser', const=2)
176176
args = parser.parse_args()
177177
main()

gui.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -611,9 +611,11 @@ def __init__(self, **kwargs):
611611
web_menu = Menu(menu, tearoff=0)
612612
opt_menu.add_cascade(label='Web browser', menu=web_menu,
613613
state=NORMAL if webdriver else DISABLED)
614-
self.browser = IntVar()
615-
for v, l in enumerate(('Chrome', 'Edge', 'Firefox', 'Opera', 'Safari')):
616-
web_menu.add_radiobutton(label=l, value=v, variable=self.browser)
614+
self.browser = IntVar(0)
615+
web_menu.add_radiobutton(label='Chrome', value=0, variable=self.browser)
616+
web_menu.add_radiobutton(label='Opera', value=1, variable=self.browser)
617+
if hasattr(webdriver.edge, 'options'):
618+
web_menu.add_radiobutton(label='Edge', value=2, variable=self.browser)
617619
self.selenium = BooleanVar()
618620
opt_menu.add_checkbutton(label='Use selenium', variable=self.selenium,
619621
state=NORMAL if webdriver else DISABLED,
@@ -662,15 +664,11 @@ def custom_auth(self, url):
662664
return pool.apply(show_webview, (url, )) # Run in separate process
663665
# Use selenium if available and selected
664666
if webdriver and self.selenium.get():
665-
# Prevent Selenium from being detected (works for Chrome and Edge only, for now)
666-
if self.browser.get() < 2:
667-
options = [webdriver.chrome, webdriver.edge][self.browser.get()].options.Options()
668-
options.add_argument("--disable-blink-features=AutomationControlled")
669-
else:
670-
options = None
671-
with [webdriver.Chrome, webdriver.Edge,
672-
webdriver.Firefox, webdriver.Opera,
673-
webdriver.Safari][self.browser.get()](options=options) as browser:
667+
options = [webdriver.chrome, webdriver.opera,
668+
webdriver.edge][self.browser.get()].options.Options()
669+
options.add_argument('--disable-blink-features=AutomationControlled')
670+
with [webdriver.Chrome, webdriver.Opera,
671+
webdriver.Edge][self.browser.get()](options=options) as browser:
674672
browser.get(url)
675673
wait = WebDriverWait(browser, 300)
676674
wait.until(EC.url_contains('void/callback'))

menu.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,11 @@ def on_loaded():
280280
webview.start()
281281
return result[0]
282282
# Use selenium to control specified web browser
283-
# Prevent Selenium from being detected (works for Chrome and Edge only, for now)
284-
if args.web < 2:
285-
options = [webdriver.chrome, webdriver.edge][args.web].options.Options()
286-
options.add_argument("--disable-blink-features=AutomationControlled")
287-
else:
288-
options = None
289-
with [webdriver.Chrome, webdriver.Edge, webdriver.Firefox, webdriver.Opera,
290-
webdriver.Safari][args.web](options=options) as browser:
283+
options = [webdriver.chrome, webdriver.opera,
284+
webdriver.edge][args.web].options.Options()
285+
options.add_argument('--disable-blink-features=AutomationControlled')
286+
with [webdriver.Chrome, webdriver.Opera,
287+
webdriver.Edge][args.web](options=options) as browser:
291288
logging.info('Selenium opened %s', browser.capabilities['browserName'])
292289
browser.get(url)
293290
WebDriverWait(browser, 300).until(EC.url_contains('void/callback'))
@@ -334,11 +331,14 @@ def main():
334331
help='disable verify SSL certificate')
335332
parser.add_argument('--timeout', type=int, help='connect/read timeout')
336333
if webdriver:
337-
for c, s in enumerate(('chrome', 'edge', 'firefox', 'opera', 'safari')):
338-
d, h = (0, ' (default)') if not webview and c == 0 else (None, '')
339-
parser.add_argument('--' + s, action='store_const', dest='web',
340-
help='use %s browser' % s.title() + h,
341-
const=c, default=d)
334+
h = 'use Chrome browser' if webview else 'use Chrome browser (default)'
335+
parser.add_argument('--chrome', action='store_const', dest='web',
336+
help=h, const=0, default=None if webview else 0)
337+
parser.add_argument('--opera', action='store_const', dest='web',
338+
help='use Opera browser', const=1)
339+
if hasattr(webdriver.edge, 'options'):
340+
parser.add_argument('--edge', action='store_const', dest='web',
341+
help='use Edge browser', const=2)
342342
parser.add_argument('--proxy', help='proxy server URL')
343343
args = parser.parse_args()
344344
main()

0 commit comments

Comments
 (0)