Skip to content

Commit b5f1ae3

Browse files
committed
ENH: Implement selenium 4 and ajust tests and bot.py
1 parent 794bb26 commit b5f1ae3

File tree

9 files changed

+72
-26
lines changed

9 files changed

+72
-26
lines changed

botcity/web/bot.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,11 @@ def check_driver():
260260
self.capabilities = cap
261261
driver_path = self.driver_path or check_driver()
262262
self.driver_path = driver_path
263+
service = BROWSER_CONFIGS.get(self.browser).get("service")
264+
service = service(executable_path=self.driver_path)
265+
service.desired_capabilities = cap
263266

264-
self._driver = driver_class(options=opt, desired_capabilities=cap, executable_path=driver_path)
267+
self._driver = driver_class(options=opt, service=service)
265268
self.set_screen_resolution()
266269

267270
def stop_browser(self):
@@ -1369,14 +1372,14 @@ def mouse_move(self, x, y):
13691372
if self.browser == Browser.FIREFOX:
13701373
# Reset coordinates if the page has gone stale. Only required for Firefox
13711374
if self._html_elem is None:
1372-
self._html_elem = self._driver.find_element_by_tag_name('body')
1375+
self._html_elem = self._driver.find_element(By.TAG_NAME, 'body')
13731376
self._x = 0
13741377
self._y = 0
13751378
else:
13761379
try:
13771380
self._html_elem.is_enabled()
13781381
except StaleElementReferenceException:
1379-
self._html_elem = self._driver.find_element_by_tag_name('body')
1382+
self._html_elem = self._driver.find_element(By.TAG_NAME, 'body')
13801383
self._x = 0
13811384
self._y = 0
13821385

botcity/web/browsers/__init__.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,31 @@ class PageLoadStrategy(str, enum.Enum):
4444
"class": chrome.Chrome,
4545
"options": chrome.default_options,
4646
"capabilities": chrome.default_capabilities,
47-
"wait_for_downloads": chrome.wait_for_downloads
47+
"wait_for_downloads": chrome.wait_for_downloads,
48+
"service": chrome.ChromeService,
4849
},
4950
Browser.FIREFOX: {
5051
"driver": "geckodriver",
5152
"class": firefox.Firefox,
5253
"options": firefox.default_options,
5354
"capabilities": firefox.default_capabilities,
54-
"wait_for_downloads": firefox.wait_for_downloads
55+
"wait_for_downloads": firefox.wait_for_downloads,
56+
"service": firefox.FirefoxService
5557
},
5658
Browser.EDGE: {
5759
"driver": "msedgedriver",
5860
"class": edge.Edge,
5961
"options": edge.default_options,
6062
"capabilities": edge.default_capabilities,
61-
"wait_for_downloads": edge.wait_for_downloads
63+
"wait_for_downloads": edge.wait_for_downloads,
64+
"service": edge.EdgeService
6265
},
6366
Browser.IE: {
6467
"driver": "IEDriverServer",
6568
"class": ie.Ie,
6669
"options": ie.default_options,
6770
"capabilities": ie.default_capabilities,
68-
"wait_for_downloads": ie.wait_for_downloads
71+
"wait_for_downloads": ie.wait_for_downloads,
72+
"service": ie.IeService
6973
},
7074
}

botcity/web/browsers/chrome.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from selenium.webdriver import Chrome # noqa: F401, F403
88
from selenium.webdriver.chrome.options import Options as ChromeOptions
99
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
10-
10+
from selenium.webdriver.chrome.service import Service as ChromeService # noqa: F401, F403
1111
from ..util import cleanup_temp_dir
1212

1313

botcity/web/browsers/edge.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import time
66
from typing import Dict
77

8-
from msedge.selenium_tools import Edge, EdgeOptions # noqa: F401, F403
98
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
10-
9+
from selenium.webdriver import Edge, EdgeOptions # noqa: F401, F403
10+
from selenium.webdriver.edge.service import Service as EdgeService # noqa: F401, F403
1111
from ..util import cleanup_temp_dir
1212

1313

botcity/web/browsers/firefox.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from selenium.webdriver import Firefox # noqa: F401, F403
88
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
99
from selenium.webdriver.firefox.options import Options as FirefoxOptions
10+
from selenium.webdriver.firefox.service import Service as FirefoxService # noqa: F401, F403
1011

1112
from ..util import cleanup_temp_dir
1213

@@ -362,23 +363,19 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
362363
temp_dir = tempfile.TemporaryDirectory(prefix="botcity_")
363364
user_data_dir = temp_dir.name
364365
atexit.register(cleanup_temp_dir, temp_dir)
365-
firefox_profile = webdriver.FirefoxProfile(user_data_dir)
366-
firefox_profile.set_preference("security.default_personal_cert", "Select Automatically")
367-
firefox_profile.set_preference('browser.download.folderList', 2)
368-
firefox_profile.set_preference('browser.download.manager.showWhenStarting', False)
366+
firefox_options.set_preference("profile", user_data_dir)
367+
firefox_options.set_preference("security.default_personal_cert", "Select Automatically")
368+
firefox_options.set_preference('browser.download.folderList', 2)
369+
firefox_options.set_preference('browser.download.manager.showWhenStarting', False)
369370
if not download_folder_path:
370371
download_folder_path = os.getcwd()
371-
firefox_profile.set_preference('browser.download.dir', download_folder_path)
372-
firefox_profile.set_preference('general.warnOnAboutConfig', False)
372+
firefox_options.set_preference('browser.download.dir', download_folder_path)
373+
firefox_options.set_preference('general.warnOnAboutConfig', False)
373374

374375
mimetypes_to_download = ",".join(FIREFOX_MIMETYPES_TO_DOWNLOAD)
375-
firefox_profile.set_preference("pdfjs.disabled", True)
376-
firefox_profile.set_preference("plugin.disable_full_page_plugin_for_types", mimetypes_to_download)
377-
firefox_profile.set_preference('browser.helperApps.neverAsk.saveToDisk', mimetypes_to_download)
378-
379-
firefox_profile.update_preferences()
380-
firefox_options.profile = firefox_profile
381-
376+
firefox_options.set_preference("pdfjs.disabled", True)
377+
firefox_options.set_preference("plugin.disable_full_page_plugin_for_types", mimetypes_to_download)
378+
firefox_options.set_preference('browser.helperApps.neverAsk.saveToDisk', mimetypes_to_download)
382379
return firefox_options
383380

384381

botcity/web/browsers/ie.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from selenium.webdriver import Ie # noqa: F401, F403
44
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
55
from selenium.webdriver.ie.options import Options
6+
from selenium.webdriver.ie.service import Service as IeService # noqa: F401, F403
67

78

89
def default_options(headless=False, download_folder_path=None, user_data_dir=None,

conftest.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,14 @@ def setup_edge(headless: bool, tmp_folder: str, download_driver: str) -> WebBot:
4949
web.driver_path = download_driver
5050
web.download_folder_path = tmp_folder
5151
opt = browsers.edge.default_options(headless=headless, download_folder_path=tmp_folder)
52-
opt.set_capability('platform', 'ANY')
52+
platforms = {
53+
"Linux": "linux",
54+
"Darwin": "mac",
55+
"Windows": "windows"
56+
}
57+
platform_name = platforms.get(platform.system())
58+
59+
opt.platform_name = platform_name
5360

5461
web.options = opt
5562
return web

requirements.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
botcity-framework-base>=0.2.2
22
beautifulsoup4
3-
msedge-selenium-tools==3.141.3
43
numpy
54
opencv-python
65
pillow
7-
selenium==3.141
6+
selenium==4.6.1

teste.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from botcity.web import WebBot, Browser, By
2+
3+
bot = WebBot()
4+
5+
# Firefox
6+
# bot.driver_path = "/home/kayque/Downloads/geckodriver-v0.32.0-linux64/geckodriver"
7+
# bot.browser = Browser.FIREFOX
8+
# bot.headless = True
9+
10+
# Chrome
11+
# bot.driver_path = "/home/kayque/Downloads/chromedriver_linux64(9)/chromedriver"
12+
# bot.browser = Browser.CHROME
13+
# bot.headless = True
14+
15+
# Edge
16+
bot.driver_path = "/home/kayque/Downloads/edgedriver_linux64/msedgedriver"
17+
bot.browser = Browser.EDGE
18+
bot.headless = True
19+
20+
try:
21+
bot.start_browser()
22+
bot.browse("https://google.com")
23+
search = bot.find_element(selector="/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input", by=By.XPATH)
24+
search.send_keys("cotação dolar")
25+
bot.enter()
26+
value = bot.find_element(selector="/html/body/div[7]/div/div[10]/div/div[2]/div[2]/div/div/div[1]/div/div/div/div/div/div/div/div[3]/div[1]/div[1]/div[2]/span[1]",
27+
by=By.XPATH)
28+
date = bot.find_element(selector="/html/body/div[7]/div/div[10]/div/div[2]/div[2]/div/div/div[1]/div/div/div/div/div/div/div/div[3]/div[1]/div[2]/span", by=By.XPATH)
29+
30+
print(f"$ 1 = R$ {value.text}")
31+
print(f"Date: {date.text}")
32+
except Exception as error:
33+
print(error)
34+
finally:
35+
bot.stop_browser()

0 commit comments

Comments
 (0)