Веб-драйвер или другая ошибка драйвера в автоматизации WhatsApp с помощью selenium script

#selenium-webdriver #google-sheets #automation #whatsapp

Вопрос:

Я пытаюсь запустить приведенный ниже скрипт на Python, но, получив эту ошибку, я немного изменил код.Программа для отправки массового настраиваемого сообщения через веб-приложение WhatsApp и считывания данных путем экспорта файла из Google листов с использованием идентификатора листа, имени листа и кода git

 '''# Program to send bulk customized message through WhatsApp web application

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager
from random import randrange
import pandas as pd
import time
import config
import argparse



class WhatsappMessage(object):
    """
    A class that encapsulates Whatsapp Message automation
    function and attributes
    """

    def __init__(self, **kwargs):
        self.sheet_id = kwargs.get('sheet_id')
        self.sheet_name = kwargs.get('sheet_name')
        self.image_path = kwargs.get('image_path')
        self.sheet_gid = kwargs.get('sheet_gid')
        self.url = f'https://docs.google.com/spreadsheets/d/{self.sheet_id}/export?format=xlsxamp;gid={self.sheet_gid}'
        self.excel_data = None
        self.driver = None
        self.driver_wait = None

    def start_process(self):
        try:
            self.read_data()
            self.load_driver()
            self.process_message()
        finally:
            self.close_driver()

    def read_data(self):
        # Read data from excel
        self.excel_data = pd.read_excel(self.url, sheet_name=self.sheet_name, engine='openpyxl')

    def load_driver(self):
        # Load the chrome driver

        self.driver = webdriver.Chrome()
        options = Options()
    options.binary_location = r"C:Program FilesGoogleChromeApplicationchrome.exe"

        

        # Open WhatsApp URL in chrome browser
        self.driver = webdriver.Chrome(ChromeDriverManager().install())

        self.driver.get("https://web.whatsapp.com")
        self.driver_wait = WebDriverWait(self.driver, 20)

    def process_message(self):
        count = 0
        # Iterate excel rows till to finish
        for column in self.excel_data['Contact'].tolist():
            # Assign customized message
            message = self.excel_data['Message'][0]

            # Locate search box through x_path
            search_box = '//*[@id="side"]/div[1]/div/label/div/div[2]'
            person_title = self.driver_wait.until(lambda driver: driver.find_element_by_xpath(search_box))

            # Clear search box if any contact number is written in it
            person_title.clear()

            # Send contact number in search box
            contact_number = str(column)

            if len(contact_number) == 10 or not contact_number.startswith('91'):
                contact_number = '91'   contact_number
            person_title.send_keys(contact_number)

            # Wait for 2 seconds to search contact number
            time.sleep(2)

            try:
                # Load error message in case unavailability of contact number
                self.driver.find_element_by_xpath('//*[@id="pane-side"]/div[1]/div/span')

                user_url = f'https://web.whatsapp.com/send?phone={contact_number}'
                self.driver.get(user_url)

                # Wait for 5 seconds to load user chat message
                time.sleep(5)

            except NoSuchElementException:
                person_title.send_keys(Keys.ENTER)

            if self.image_path is not None:
                attachment_button_path = '//div[@title="Attach"]'
                attachment_button = self.driver_wait.until(lambda driver: driver.find_element_by_xpath(
                    attachment_button_path))
                attachment_button.click()
                image_button_path = '//input[@accept="image/*,video/mp4,video/3gpp,video/quicktime"]'
                image_button = self.driver_wait.until(lambda driver: driver.find_element_by_xpath(image_button_path))
                image_button.send_keys(self.image_path)
                time.sleep(3)
                self.send_message(message)

            else:
                self.send_message(message)

            timelapse = randrange(3, 10)
            time.sleep(timelapse)
            count = count   1

    def send_message(self, message):
        # Format the message from excel sheet
        # message = message.replace('{customer_name}', str(self.excel_data['Name'][count]))
        actions = ActionChains(self.driver)
        message = message.replace("n", '__new_line__')
        message = message.replace("r", '__new_line__')
        msg_lines = message.split('__new_line__')
        msg_lines[:] = [msg for msg in msg_lines if msg.strip()]
        for msg in msg_lines:
            actions.send_keys(msg)
            actions.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.SHIFT).key_up(Keys.ENTER)
            actions.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.SHIFT).key_up(Keys.ENTER)
        actions.send_keys(Keys.ENTER)
        actions.perform()
        time.sleep(2)

    def close_driver(self):
        # Close chrome browser
        self.driver.quit()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Whatsapp Bulk Message Automation with optional Attachment feature')
    parser.add_argument('sheet_id', help='Google Sheet Id', type=str)
    parser.add_argument('sheet_name', help='Google Sheet name', type=str)
    parser.add_argument('sheet_gid', help='Google Sheet gid', type=int)
    parser.add_argument('--image-path', help='Full path of image attachment', type=str, dest='image_path')
    parsed_args = parser.parse_args()
    args = vars(parsed_args)
    whatsapp = WhatsappMessage(**args)
    whatsapp.start_process()'''
 

То же самое отлично работало в ubantu, но не работало в Windows . я не знаю, откуда он берет путь самостоятельного веб-драйвера, на который я изменил путь и поместил драйвер в ту же папку

 Traceback (most recent call last):
  File "d:whatsapp-bulk-message-automation-mainappapp.py", line 34, in start_process
    self.load_driver()
  File "d:whatsapp-bulk-message-automation-mainappapp.py", line 48, in load_driver
    self.driver = webdriver.Chrome(executable_path=r'C:UsersNityamAppDataLocalProgramsPythonPython39chromedriver.exe',
TypeError: __init__() got an unexpected keyword argument 'options'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:whatsapp-bulk-message-automation-mainappapp.py", line 142, in <module>
    whatsapp.start_process()
  File "d:whatsapp-bulk-message-automation-mainappapp.py", line 37, in start_process
    self.close_driver()
  File "d:whatsapp-bulk-message-automation-mainappapp.py", line 130, in close_driver
    self.driver.quit()
AttributeError: 'NoneType' object has no attribute 'quit'