Как мне заставить selenium открывать один браузер и продолжать использовать этот браузер вместо загрузки нового браузера для каждого URL / scrape javascript

#python #selenium

#python #селен

Вопрос:

У меня есть следующий код, и я пытаюсь очистить файл xls, который я должен использовать selenium, насколько я могу судить.

Веб-сайт использует следующий код для получения файла:

 function GetQuote() {
          $('#lblError').html('');
          $('#lblError2').html('');
    if ($('#txtTicker') != null amp;amp; $('#txtTicker').val() != null amp;amp; $('#txtTicker').val().trim() != ''){
        trackGAEventGbl('quote-table-download', $('#txtTicker').val(), 'download');         
        var frm = document.forms[0];
        if (window.location.href.indexOf('?') > -1) {
            frm.action = window.location.pathname;
        }           
        frm.submit();
        return true;
    }
    else {
        alert('Please enter a Stock or Index Symbol.');
        return false;
    }
  }                         
  

Мне не повезло очистить это без использования selenium. Тем не менее, я нахожу, что для завершения кода требуется много времени, поскольку у меня есть несколько компаний, за которыми я слежу. Но также каждый раз, когда я использую selenium, используя приведенный ниже код, он открывает и закрывает новый экземпляр chrome. Есть ли способ ускорить это?

 def get_file(ticker, url):
    chrome_driver_path=r"D:Program Fileschromedriver84chromedriver.exe"
    options = webdriver.ChromeOptions()

    options.binary_location = r"C:Program FilesGoogleChromeApplicationchrome.exe"
    driver = webdriver.Chrome(chrome_driver_path, options=options)
    driver.get(url)
    source = driver.page_source

    inputElement = driver.find_element_by_id('txtTicker')
    inputElement.send_keys(ticker)
    inputElement.submit()

    tickers = [line.rstrip() for line in open(r"C:Python38Projectsticker_list.txt", "r")]
for ticker in tickers:

    get_file(ticker)
    if os.path.exists(r'C:UsersDownloadsquotedata.dat'):

        if os.stat(r'C:UsersDownloadsquotedata.dat').st_size != 0:
            df = pd.read_csv(r'C:UsersDownloadsquotedata.dat',
                        header=None, sep=',', engine='python',skiprows=2)
            new_header = df.iloc[0]
            df = df[1:]
            df.columns = new_header

            print(df)
            store_path = r"D:DataUSOption Data{}{} data.csv".format(ticker,ticker)
            print(store_path)
            df.to_csv(store_path, index = False)


        os.remove(r"C:UsersDownloadsquotedata.dat")
        count = count   1
        print("Processed {} / {} Tickers".format(count, len_tickers))
  

Комментарии:

1. Пожалуйста, покажите вам полный код, где вы используете эту get_file функцию?

2. Я не включил URL-адрес, если вам это нужно, я могу отправить через pm или что-то в этом роде

Ответ №1:

Просто определите driver один раз в начале вашего скрипта, а затем используйте его в get_file функции:

 chrome_driver_path=r"D:Program Fileschromedriver84chromedriver.exe"
options = webdriver.ChromeOptions()
options.binary_location = r"C:Program FilesGoogleChromeApplicationchrome.exe"
driver = webdriver.Chrome(chrome_driver_path, options=options)

def get_file(ticker, url):
  driver.get(url)
  ...

tickers = [line.rstrip() for line in open(r"C:Python38Projectsticker_list.txt", "r")]
for ticker in tickers:
  get_file(ticker)
  ...