简体   繁体   中英

How to keep Selenium Webdriver chrome browser open when running a program?

I am using selenium to extract data from a sports website. I want my Chrome browser to remain open until I close it. But my program closes the Chrome window after 3-4 seconds. Any help on finding a solution would be much appreciated.

Here's my code:

from selenium import webdriver
from selenium.webdriver.common.keys import  Keys
import pandas as pd

print('\nWelcome to Arsenal FC players payroll page\n')
page_num = input('Enter the year for payroll data (2011-2020): ')

df = pd.DataFrame(columns = ['Player', 'Salary', 'Year']) #creates a master dataframe


driver = webdriver.Chrome('/Users/mahtabkhan/Documents/chromedriver')

if(page_num != 2020):
    url = 'https://www.spotrac.com/epl/arsenal-fc/payroll/' + page_num + '/'
else:
    url = 'https://www.spotrac.com/epl/arsenal-fc/payroll/' 

driver.get(url)

players = driver.find_elements_by_xpath('//td[@class="player"]')
salaries = driver.find_elements_by_xpath('//td[@class="cap info"]')

#to get the text of each player into a list
players_list = []
for p in range(len(players)):
    players_list.append(players[p].text)

#to get the salaries into a list
salaries_list = []
for s in range(len(salaries)):
    salaries_list.append(salaries[s].text)  

data_tuples = list(zip(players_list[1:],salaries_list[1:])) # list of each players name and salary paired together
temp_df = pd.DataFrame(data_tuples, columns=['Player','Salary']) # creates dataframe of each tuple in list
temp_df['Year'] = page_num   # adds season beginning year to each dataframe
df = df.append(temp_df)  #appends to master dataframe


driver.close()

It closes because you have added driver.close() at the end. Just remove that line and the browser would stay open forever. If you want to close it after some time, then you can add time.sleep before driver.close() like this:

import time

# Your code

time.sleep(60) #Stays open for 60 seconds (which is 1 min)

driver.close()

In your WebDriver ( when you're instantiating it ), you can add the following to your Chrome Options

chrome_options.add_experimental_option("detach", True)

Once you do that, run it via the command terminal ( Command Prompt in Windows ) and it should not close on you

MAIN PROGRAM - For Reference

from selenium import webdriver

def get_chrome_driver():
    """This sets up our Chrome Driver and returns it as an object"""
    path_to_chrome = "F:\Selenium_Drivers\Windows_Chrome85_Driver\chromedriver.exe"
    chrome_options = webdriver.ChromeOptions() 
    
    # Keeps the browser open
    chrome_options.add_experimental_option("detach", True)
    
    # Browser is displayed in a custom window size
    chrome_options.add_argument("window-size=1500,1000")
    
    # Removes the "This is being controlled by automation" alert / notification
    chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
    
    return webdriver.Chrome(executable_path = path_to_chrome,
                            options = chrome_options)



# Gets our chrome driver and opens our site
chrome_driver = get_chrome_driver()
chrome_driver.get("https://www.google.com/")
print('The browser should not close after you see this message')
chrome_driver.service.stop()

Selenium 4 \/ PHP \/ Docker

version: "3.5"
#Latest version
networks:
  grid-network:

services:

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    environment:
      - NODE_MAX_SESSION=5
      - NODE_MAX_INSTANCES=5
      - GRID_MAX_SESSION=31556926
      - GRID_BROWSER_TIMEOUT=31556926
      - GRID_TIMEOUT=31556926
      - GRID_SESSION_TIMEOUT=31556926
      - SESSION_TIMEOUT=31556926
      - NODE_SESSION_TIMEOUT=31556926
      - GRID_CLEAN_UP_CYCLE=31556926
      - SE_NODE_SESSION_TIMEOUT=31556926
      - SE_SESSION_REQUEST_TIMEOUT=31556926
    ports:
      - "4446:4444"
    networks:
      - grid-network
      
  chrome:
    shm_size: 4gb 
    image: selenium/standalone-chrome:latest
    container_name: chrome
    depends_on:
      - selenium-hub
    environment:
      - NODE_MAX_SESSION=5
      - NODE_MAX_INSTANCES=5
      - GRID_MAX_SESSION=31556926
      - GRID_BROWSER_TIMEOUT=31556926
      - GRID_TIMEOUT=31556926
      - GRID_SESSION_TIMEOUT=31556926
      - SESSION_TIMEOUT=31556926
      - NODE_SESSION_TIMEOUT=31556926
      - GRID_CLEAN_UP_CYCLE=31556926
      - SE_NODE_SESSION_TIMEOUT=31556926
      - SE_SESSION_REQUEST_TIMEOUT=31556926
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "33333:5900"
      - "3333:7900"
      - "44444:4444"
    links:
      - selenium-hub
    networks:
      - grid-network

driver.close() will close your browser. just remove it if you want your browser still open

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM