mukulhase / WebWhatsapp-Wrapper

An API for sending and receiving messages over web.whatsapp [Working as of 18th May 2018]
https://webwhatsapi.readthedocs.io/en/latest/
MIT License
2.02k stars 798 forks source link

Exception in driver.get_unread() #385

Open BirendraSahu opened 5 years ago

BirendraSahu commented 5 years ago

Hi, After Wapi.js changes for last issue. I am getting exception in get_unread() but not always.

Waiting for QR Bot started Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Checking for more messages Traceback (most recent call last): File "D:\FirstHive-Docs\GulfWhatApps.py", line 14, in for contact in driver.get_unread(): File "C:\Program Files (x86)\Python36-32\lib\site-packages\webwhatsapi__init.py", line 338, in get_unread raw_message_groups = self.wapi_functions.getUnreadMessages(include_me, include_notifications, use_unread_count) File "C:\Program Files (x86)\Python36-32\lib\site-packages\webwhatsapi\wapi_js_wrapper.py", line 126, in call__ return self.driver.execute_async_script(command) File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 652, in execute_async_script 'args': converted_args})['value'] File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute response = self.command_executor.execute(driver_command, params) File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 472, in execute return self._request(command_info[0], url, body=data) File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 495, in _request self._conn.request(method, parsed_url.path, body, headers) File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 1239, in request self._send_request(method, url, body, headers, encode_chunked) File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 1250, in _send_request self.putrequest(method, url, **skips) File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 1108, in putrequest raise CannotSendRequest(self.__state) http.client.CannotSendRequest: Request-sent

brunosoaresds commented 5 years ago

I think your selenium is crashing in some point. As you are checking periodically the unread messages, try tu use the observable implementation.

lfdelphino commented 5 years ago

I guess it's something on your environment or too many requests, you should wrap it inside a try, like this:

...

while True:
    time.sleep(5)
    print('Checking for more messages')
    try:
        for contact in driver.get_unread():
            for message in contact.messages:
                if isinstance(message, Message):  # Currently works for text messages only.
                    print("New message '{}' received from number {}".format(message.content, message.sender.id))
    except:
        print("Something wrong happened, let's try again")

Doing this won't make you lose any messages, if an error happens it will just loop again and this time it'll probably work