Can't create two sessions- one fails one works
I have a post request in Django views from which I am calling a Selenium WebDriver. I am running it on Linux.
I have set the DISPLAY in the OS environment.
Now when I call the request it does open the Selenium browser normally, but when the driver is still open and I call the request again the Selenium browser can't create the session.
DJANGO uses wsgi
application.
Switching to asgi
may not work.
I was expecting to have two drivers open but it fails on the second one.
Threading is not an issue here
class Test(generics.CreateAPIView):
def create(self, request, *args, **kwargs):
searchDict = dict(request.data)
profile = searchDict['profile']
threading.Thread(target=self.runDriver, args = (profile,)).start()
return Response(status=status.HTTP_200_OK)
def runDriver(self, profile):
br = Driver()
useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0'
profile_name = profile
username = 'samsan'
password = '##1234sAMIUL.'
br.createUCDriver(useragent, profile_name)
dr = br.ucDriver
dr.get('https://www.google.com/')
time.sleep(10)
dr.get(dr.current_url)
This is the Driver class:
class Driver:
def __init__(self):
self.driver = None
self.ucDriver = None
self.waitTime = 10
# self.logger = Logger()
# self.executable = input("Please enter chrome executable path: ")
self.executable = "seleniumDriver/chromedriver-mac-arm64/chromedriver"
def createUCDriver(self, user_agent=None, profile_name='Profile 2'):
# os.environ['DISPLAY'] = ':10.0'
options = webdriver.ChromeOptions()
if user_agent:
options.add_argument(f'--user-agent={user_agent}')
print('sys', sys.platform)
if sys.platform == 'darwin':
options.add_argument('--user-data-dir=/Users/yourusername/Library/Application Support/Google/Chrome')
elif sys.platform == 'linux' or sys.platform == 'linux2':
# options.add_argument('--user-data-dir=/home/samiul/.config/google-chrome')
options.add_argument(f'--user-data-dir={Path(__file__).parent.parent.parent / "application" / "local" / "nfs"}')
elif sys.platform == 'win32' or sys.platform == 'win64':
options.add_argument('--user-data-dir=C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\User Data')
options.add_argument(f'--profile-directory={profile_name}')
options.add_argument('--hide-crash-restore-bubble')
options.add_argument("--disable-popup-blocking")
options.add_argument('--disable-features=InfiniteSessionRestore')
options.add_argument('--disable-features=PrivacySandboxSettings4')
if sys.platform == 'darwin':
print('mac')
driver = uc.Chrome(options=options, use_subprocess=True)
elif sys.platform == 'linux' or sys.platform == 'linux2':
service = Service(executable_path=str(Path(__file__).parent/ 'chromeDriver'/ 'chromedriver-linux64' / 'chromedriver'))
print('linux')
# driver = uc.Chrome(options=options, use_subprocess=True, driver_executable_path=Path(__file__).parent/ 'chromeDriver'/ 'chromedriver-linux64' / 'chromedriver')
driver = uc.Chrome(options=options, use_subprocess=True, service = service)
elif sys.platform == 'win32' or sys.platform == 'win64':
print('windows')
try:
driver = uc.Chrome(options=options, use_subprocess=True, driver_executable_path=str(Path(__file__).parent/ 'chromeDriver'/ 'chromedriver-win32' / 'chromedriver.exe'))
except Exception as e:
print('Error in starting Chrome', e)
self.ucDriver = driver
self.ucDriver.set_page_load_timeout(1.5 * 60)