неопределенная переменная 'драйвер' / не создавать новый экземпляр Chrome - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь вызвать функцию щелчка, наконец, в моем /main.py файле.

/ main.py

"""Start Point"""

from data.find_pending_records import FindPendingRecords
from vital.vital_entry import VitalEntry
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import pandas as pd

if __name__ == "__main__":
    try: 
        # for PENDING_RECORDS in FindPendingRecords().get_excel_data(): begin to loop through entire directory

            PENDING_RECORDS = FindPendingRecords().get_excel_data()
            # Do operations on PENDING_RECORDS

            # Reads excel to map data from excel to vital
            MAP_DATA = FindPendingRecords().get_mapping_data()

            # Configures Driver
            VITAL_ENTRY = VitalEntry()

            # Start chrome and navigate to vital website
            VITAL_ENTRY.instantiate_chrome()

            # Begin processing Records
            VITAL_ENTRY.process_records(PENDING_RECORDS, MAP_DATA)

            # Save Record
            VITAL_ENTRY.save_contact(driver)

            print (PENDING_RECORDS)
            print("All done")

    except Exception as exc:
        # print(exc)
        raise

/ vital_entry.py

class VitalEntry:
    """Vital Entry"""

    def save_contact (self, driver):
        driver.implicitly_wait(15)
        driver.find_element_by_css_selector("#publishButton").click() 

Я постоянно получаю эту ошибку в приглашении:

Traceback (most recent call last):
  File "main.py", line 32, in <module>
    VITAL_ENTRY.save_contact(driver)
NameError: name 'driver' is not defined

Я не хочу создавать новый сеанс или окно chrome ... Я также пытался связать это на моем VITAL_ENTRY.process_records(PENDING_RECORDS, MAP_DATA) выше. Как видите, я уже импортирую драйвер; и я использую его в приведенных выше вызовах - я не хочу создавать новый экземпляр браузера.

Вот .instantiate_chrome() ниже:

def instantiate_chrome(self):
    """Create Chrome webdriver instance."""
    self.options.headless = config.HEADLESS

    if not self.options.headless:
        self.options.add_argument("--start-maximized")

    self.options.add_argument('--disable-infobars')
    self.options.add_argument('--disable-gpu')

    self.driver = webdriver.Chrome(options=self.options)
    self.driver.set_page_load_timeout(30)
    self.driver.implicitly_wait(15)
    self.driver.get(config.VITAL_URL)

1 Ответ

1 голос
/ 19 марта 2019

Итак, вы создаете сеанс браузера, а затем никогда не пропускаете его из этой функции.Если вы хотите использовать его в другом месте, ваш код instantiate_chrome() должен будет return driver, тогда вам нужно будет назначить его, как я уже говорил в моем предыдущем комментарии

driver= VITAL_ENTRY.instantiate_chrome()

...