Skip to content

Commit 45e1847

Browse files
authored
Merge pull request #776 from deepakdinesh1123/zoom_attendance_taker
added zoom_attendance_taker
2 parents 5c46a4c + a604332 commit 45e1847

File tree

3 files changed

+168
-0
lines changed

3 files changed

+168
-0
lines changed
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
from selenium import webdriver
2+
from selenium.webdriver.support import ui
3+
from selenium.webdriver.common.by import By
4+
from selenium.webdriver.support import expected_conditions as EC
5+
import PySimpleGUI as sg
6+
from webdriver_manager.chrome import ChromeDriverManager
7+
from webdriver_manager.firefox import GeckoDriverManager
8+
from webdriver_manager.microsoft import EdgeChromiumDriverManager
9+
from selenium.common.exceptions import NoSuchElementException
10+
from datetime import datetime
11+
12+
13+
class Zoom:
14+
def __init__(
15+
self, selected_driver, meeting_personal_id, username, meeting_password
16+
):
17+
18+
self.meeting_personal_id = meeting_personal_id
19+
self.selected_driver = selected_driver
20+
self.username = username
21+
self.meeting_password = meeting_password
22+
self.driver = None
23+
24+
def setup_driver(self):
25+
if self.selected_driver == "Chrome":
26+
self.driver = webdriver.Chrome(ChromeDriverManager().install())
27+
elif self.selected_driver == "FireFox(Gecko)":
28+
self.driver = webdriver.Firefox(GeckoDriverManager().install())
29+
elif self.selected_driver == "Edge":
30+
self.driver = webdriver.Edge(EdgeChromiumDriverManager().install())
31+
32+
def join(self):
33+
34+
self.wait = ui.WebDriverWait(self.driver, 30)
35+
self.zoom_join_meeting = self.driver.get("https://zoom.us/join")
36+
ui.WebDriverWait(self.driver, 100).until(
37+
EC.presence_of_element_located((By.XPATH,
38+
'//*[@id="join-confno"]'))
39+
)
40+
enter_pid = self.driver.find_element_by_xpath('//*[@id="join-confno"]')
41+
enter_pid.send_keys(self.meeting_personal_id)
42+
join_button = self.driver.find_element_by_xpath('//*[@id="btnSubmit"]')
43+
join_button.click()
44+
self.wait.until(
45+
lambda button: self.driver.find_element_by_xpath(
46+
'//*[@id="zoom-ui-frame"]/div[2]/div/div[1]/div/div'
47+
)
48+
)
49+
launch_meeting = self.driver.find_element_by_xpath(
50+
'//*[@id="zoom-ui-frame"]/div[2]/div/div[1]/div/div'
51+
)
52+
launch_meeting.click()
53+
self.wait.until(
54+
lambda button: self.driver.find_element_by_xpath(
55+
'//*[@id="zoom-ui-frame"]/div[2]/div/div[2]/h3[2]/span/a'
56+
)
57+
)
58+
join_from_browser = self.driver.find_element_by_xpath(
59+
'//*[@id="zoom-ui-frame"]/div[2]/div/div[2]/h3[2]/span/a'
60+
)
61+
join_from_browser.click()
62+
self.wait.until(
63+
lambda field:
64+
self.driver.find_element_by_xpath('//*[@id="inputname"]')
65+
)
66+
name_field = self.driver.find_element_by_xpath('//*[@id="inputname"]')
67+
name_field.send_keys(self.username)
68+
join_button = ui.WebDriverWait(self.driver, 300).until(
69+
EC.element_to_be_clickable((By.XPATH, '//*[@id="joinBtn"]'))
70+
)
71+
join_button.click()
72+
passcode = ui.WebDriverWait(self.driver, 300).until(
73+
EC.presence_of_element_located((By.XPATH,
74+
'//*[@id="inputpasscode"]'))
75+
)
76+
passcode.send_keys(self.meeting_password)
77+
join_button = ui.WebDriverWait(self.driver, 300).until(
78+
EC.element_to_be_clickable((By.XPATH, '//*[@id="joinBtn"]'))
79+
)
80+
join_button.click()
81+
"""participants = ui.WebDriverWait(self.driver, 600).until(
82+
EC.presence_of_element_located(
83+
(By.XPATH, '//*[@id="wc-footer"]/div/div[2]/button[1]')
84+
)
85+
)"""
86+
87+
def get_attendees_list(self):
88+
89+
ui.WebDriverWait(self.driver, 1000).until(
90+
EC.presence_of_element_located(
91+
(
92+
By.XPATH,
93+
'//*[@id="wc-container-left"]/div[3]/div/'
94+
'div[2]/div/div/div[1]/div',
95+
)
96+
)
97+
)
98+
elem = self.driver.find_element_by_xpath(
99+
'//*[@id="wc-container-left"]/div[3]/div/div[2]/div/div/div[1]/div'
100+
)
101+
attendees = [elem.text]
102+
try:
103+
i = 2
104+
while True:
105+
elem = self.driver.find_element_by_xpath(
106+
f'//*[@id="wc-container-left"]/div[3]/div/div[2]'
107+
f'/div/div/div[1]/div[{i}]/div'
108+
)
109+
i += 1
110+
attendees.append(elem.text)
111+
except NoSuchElementException:
112+
pass
113+
print(attendees)
114+
with open("attended.csv", "w+") as fp:
115+
fp.write(datetime.now().isoformat(' '))
116+
fp.writelines(",".join(attendees))
117+
118+
119+
class GUI:
120+
def __init__(self):
121+
self.drivers = ["Chrome", "FireFox(Gecko)", "Edge"]
122+
self.layout = [
123+
[sg.Text("Meeting ID: "), sg.Input(key="meetingID")],
124+
[sg.Text("Meeting Password"),
125+
sg.Input(password_char="*", key="password")],
126+
[sg.Text("Name"), sg.Input(key="name")],
127+
[
128+
sg.Listbox(
129+
self.drivers,
130+
auto_size_text=True,
131+
key="Driver",
132+
default_values="Chrome",
133+
enable_events=True,
134+
)
135+
],
136+
[sg.Button("Submit", key="submit")],
137+
]
138+
139+
def create(self):
140+
self.window = sg.Window("Zoom", self.layout, size=(600, 200))
141+
while True:
142+
self.event, self.values = self.window.read()
143+
if self.event == sg.WIN_CLOSED or self.event == "Exit":
144+
break
145+
elif self.event == "submit":
146+
return self.values
147+
148+
149+
if __name__ == "__main__":
150+
gui = GUI()
151+
values = gui.create()
152+
zoom_client = Zoom(
153+
values["Driver"][0], values["meetingID"],
154+
values["name"], values["password"]
155+
)
156+
zoom_client.setup_driver()
157+
zoom_client.join()
158+
zoom_client.get_attendees_list()

zoom_attendance_taker/readme.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Zoom Attendance Taker
2+
3+
## After running the scripts it creates a CSV file with the names of all the participants in the meeting along with time and date
4+
## How to run
5+
- Install the sependencies using pip or conda from the requirements.txt file
6+
- Install Chrome, Firefox or edge browser (You can select the one you want to run script on using the GUI)
7+
- Run the script
8+
9+
### Note:
10+
No need to install the webdriver for your version of browser since webdriver manager will automatically do it for you
1.32 KB
Binary file not shown.

0 commit comments

Comments
 (0)