-
-
Notifications
You must be signed in to change notification settings - Fork 217
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #74 from xandao6/master
Refactored and improved
- Loading branch information
Showing
14 changed files
with
316 additions
and
233 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
wplay.egg-info/ | ||
__pycache__/ | ||
*.pyc | ||
tests | ||
.vscode | ||
tracking_data |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,7 +5,7 @@ | |
|
||
setup( | ||
name="wplay", | ||
version="2.2.0", | ||
version="3.0.0", | ||
install_requires=["selenium >= 3.141.0", | ||
"python-telegram-bot >= 11.1.0", | ||
"datetime >= 4.3", | ||
|
@@ -20,7 +20,7 @@ | |
author="Rohit Potter", | ||
author_email="[email protected]", | ||
license="MIT", | ||
python_requires=">=3.4", | ||
python_requires=">=3.6", | ||
url="https://github.com/rpotter12/whatsapp-play/", | ||
download_url="https://pypi.org/project/wplay/", | ||
keywords=[ | ||
|
@@ -36,8 +36,6 @@ | |
classifiers=[ | ||
"Programming Language :: Python", | ||
"Programming Language :: Python :: 3", | ||
"Programming Language :: Python :: 3.4", | ||
"Programming Language :: Python :: 3.5", | ||
"Programming Language :: Python :: 3.6", | ||
"Programming Language :: Python :: 3.7", | ||
"Programming Language :: Python :: 3 :: Only", | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,18 @@ | ||
from selenium import webdriver | ||
from selenium.webdriver.support.ui import WebDriverWait | ||
from selenium.webdriver.support import expected_conditions as EC | ||
from selenium.webdriver.common.by import By | ||
from webdriver_manager.chrome import ChromeDriverManager | ||
from selenium.webdriver.common.keys import Keys | ||
from wplay import seleniumUtils as sel | ||
|
||
|
||
def blast(name): | ||
#name = str(input("Enter the name of target: ")) | ||
|
||
# enter the number of the person by the user | ||
target = str(name) #str(input("Enter the name of target: ")) | ||
message = str(input("Enter your message: ")) | ||
n = int(input("Enter the number of messages to blast: ")) | ||
message = str(input("Enter your message: ")) | ||
number_of_messages = int(input("Enter the number of messages to blast: ")) | ||
|
||
# chrome driver | ||
driver = webdriver.Chrome(ChromeDriverManager().install()) | ||
driver.get("https://web.whatsapp.com/") | ||
wait = WebDriverWait(driver, 600) | ||
_, driver_wait, chosen_website = sel.initialize_chrome_driver( | ||
sel.websites['whatsapp']) | ||
|
||
# finds the target and navigate to it | ||
x_arg = '//span[contains(@title, '+ '"' +target + '"'+ ')]' | ||
person_title = wait.until(EC.presence_of_element_located((By.XPATH, x_arg))) | ||
print(target) | ||
person_title.click() | ||
sel.find_and_navigate_to_target(driver_wait, chosen_website, name) | ||
|
||
# navigate to text part | ||
xpath = '//div[@class="_3u328 copyable-text selectable-text"]' | ||
message_area = wait.until(EC.presence_of_element_located((By.XPATH, xpath))) | ||
message_area = sel.navigate_to_message_area(driver_wait, chosen_website) | ||
|
||
# sends message multiple times | ||
i=0 | ||
while i<=n: | ||
message_area.send_keys(message + Keys.ENTER) | ||
i=i+1 | ||
for _ in range(number_of_messages): | ||
sel.send_message(message_area, message) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,77 +1,74 @@ | ||
# for bot web browser | ||
from selenium import webdriver | ||
from selenium.webdriver.support.ui import WebDriverWait | ||
from selenium.webdriver.support import expected_conditions as EC | ||
from selenium.webdriver.common.by import By | ||
from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException | ||
|
||
# to check and install web browser | ||
from webdriver_manager.chrome import ChromeDriverManager | ||
|
||
# to play sound | ||
from playsound import playsound | ||
|
||
# for system control | ||
import time | ||
import os | ||
import datetime | ||
from datetime import datetime | ||
from playsound import playsound | ||
from wplay import seleniumUtils as sel | ||
|
||
|
||
def tracker(name): | ||
#name = str(input("Enter the name of target: ")) | ||
|
||
driver, driver_wait, chosen_website = sel.initialize_chrome_driver( | ||
sel.websites['whatsapp']) | ||
|
||
sel.find_and_navigate_to_target(driver_wait, chosen_website, name) | ||
|
||
# finds if online_status directory is present | ||
if 'tracking_data' not in os.listdir(os.getcwd()): | ||
os.mkdir('tracking_data') | ||
|
||
# create status.txt file and overwrite if exists | ||
status_file = open( | ||
os.path.join('tracking_data', f'status_{name}.txt'), 'w' | ||
) | ||
status_file.close() | ||
|
||
# open status.txt in memory with append mode | ||
status_file = open( | ||
os.path.join('tracking_data', f'status_{name}.txt'), 'a' | ||
) | ||
|
||
# check status | ||
is_sound_enabled = True | ||
last_status = 'offline' | ||
try: | ||
while True: | ||
try: | ||
status = driver.find_element_by_class_name('_315-i').text | ||
if status == 'online': | ||
is_online = True | ||
else: | ||
# status is last seen | ||
is_online = False | ||
status = 'offline' | ||
except: | ||
status = 'offline' | ||
is_online = False | ||
|
||
# the name of the person by the user | ||
target = str(name) #str(input("Enter the name of target: ")) | ||
if last_status != is_online: | ||
# play sound when the person is online | ||
if is_online: | ||
try: | ||
if is_sound_enabled: | ||
playsound('plucky.wav') | ||
except: | ||
print("Error: Couldn't play the sound.") | ||
is_sound_enabled = False | ||
|
||
# chrome driver | ||
driver = webdriver.Chrome(ChromeDriverManager().install()) | ||
driver.get("https://web.whatsapp.com/") | ||
wait = WebDriverWait(driver, 600) | ||
# print date, time and status to console | ||
print( | ||
f'{datetime.now().strftime("%d/%m/%Y, %H:%M:%S")}' + | ||
f' - Status: {status}' | ||
) | ||
|
||
# finds the target and navigate to it | ||
x_arg = '//span[contains(@title, '+ '"' +target + '"'+ ')]' | ||
person_title = wait.until(EC.presence_of_element_located((By.XPATH, x_arg))) | ||
print(target) | ||
person_title.click() | ||
# writes date, time and status in status.txt | ||
status_file.write( | ||
f'{datetime.now().strftime("%d/%m/%Y, %H:%M:%S")}' + | ||
f' - Status: {status}\n') | ||
|
||
# finds if online_status directory is present | ||
if 'online_status_data' not in os.listdir(os.getcwd()): | ||
os.mkdir('online_status_data') | ||
f=open(os.path.join('online_status_data' , 'status.txt'),'w') | ||
f.close() | ||
# check status | ||
while True: | ||
i=0 | ||
try: | ||
status = driver.find_element_by_class_name('_315-i').text | ||
i=1 | ||
except (NoSuchElementException, StaleElementReferenceException): | ||
status = 'offline' | ||
i=0 | ||
# to play sound when the person is online | ||
if i==1: | ||
playsound('plucky.mp3') | ||
# prints date, time and status | ||
print(datetime.datetime.now()) | ||
print(status) | ||
# writes date, time and status in status.txt | ||
f=open(os.path.join('online_status_data' , 'status.txt'),'a') | ||
f.write(str(datetime.datetime.now())) | ||
f.write(status) | ||
f.close() | ||
# Loop to check the online status until the offline status appear and vice-versa | ||
# this loop will help to stop print status until the other status appears | ||
while True: | ||
if i == 1: | ||
try: | ||
re_status = driver.find_element_by_class_name('_315-i').text | ||
re_status = 'online' | ||
continue | ||
except (NoSuchElementException, StaleElementReferenceException): | ||
break | ||
else: | ||
try: | ||
re_status = driver.find_element_by_class_name('_315-i').text | ||
re_status = 'online' | ||
break | ||
except (NoSuchElementException, StaleElementReferenceException): | ||
continue | ||
time.sleep(1) | ||
last_status = is_online | ||
time.sleep(0.5) | ||
finally: | ||
status_file.close() | ||
print(f'\nStatus file saved in: ' + | ||
f'{os.path.join(os.getcwd(),"tracking_data")}') |
Binary file not shown.
Binary file not shown.
Oops, something went wrong.