未定义的变量 'driver' / 不创建新的 chrome 实例
undefined variable 'driver' / don't create new chrome instance
我正在尝试调用点击功能,最后在我的 /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 会话或 window...我也试过在上面的 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)
所以你创建了浏览器会话,然后你永远不会把它传出那个函数。如果您想在其他地方使用它,您的 instantiate_chrome()
代码将需要 return driver
,然后您需要按照我在之前的评论中所述分配它
driver= VITAL_ENTRY.instantiate_chrome()
我正在尝试调用点击功能,最后在我的 /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 会话或 window...我也试过在上面的 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)
所以你创建了浏览器会话,然后你永远不会把它传出那个函数。如果您想在其他地方使用它,您的 instantiate_chrome()
代码将需要 return driver
,然后您需要按照我在之前的评论中所述分配它
driver= VITAL_ENTRY.instantiate_chrome()