Вызов класса из другого скрипта - PullRequest
0 голосов
/ 12 января 2020

Я нашел код, который могу использовать в своем собственном сценарии, я не совсем уверен, как работает весь код, но он работает :-), но как новичок я не знаю, как его вызвать, это выглядит например:

"""
This script uses a simplified version of the one here:
https://snipt.net/restrada/python-selenium-workaround-for-full-page-screenshot-using-chromedriver-2x/

It contains the *crucial* correction added in the comments by Jason Coutu.
"""

import sys

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
import util
from random import randint


class Test(unittest.TestCase):
    """ Demonstration: Get Chrome to generate fullscreen screenshot """

    def setUp(self):
        self.driver = webdriver.Chrome()

    def tearDown(self):
        self.driver.quit()

    def test_fullpage_screenshot(self):
        ''' Generate document-height screenshot '''

        url = "https://www.(a login page)

        # Login on Stockopedia
        self.driver.find_element_by_id('username').send_keys('XXXXXXXXXXXXX')
        self.driver.find_element_by_id('password').send_keys('XXXXXXXXXXXXX')
        self.driver.find_element_by_id('auth_submit').click()
        time.sleep(5)
        # Indsæt tickerkode
        self.driver.find_element_by_name('searchQuery').send_keys(var1, Keys.ENTER)
        time.sleep(5)
        self.driver.find_element_by_name('searchQuery').send_keys('', Keys.ENTER)
        time.sleep(randint(10, 60))

        util.fullpage_screenshot(self.driver, "test.jpg")


if __name__ == "__main__":
    unittest.main(argv=[sys.argv[0]])

Кто-нибудь может мне помочь, поэтому я могу вызвать его из другого скрипта с переменной var1 в качестве аргумента

Теперь я добавил скрипт, который вызовите класс, вызов между 2 рядами звезд *. Но, как я понимаю, даже экземпляр класса не создан, что я делаю не так?

import bs4 as bs
import datetime as dt
import os
import logging
import pandas as pd
from pandas_datareader import data as pdr
import pickle
import requests
import re
import test
import fix_yahoo_finance as yf
import time

yf.pdr_override

#  ticker_index indeholder: stien til det website den skal hente tickerkoderne,
# klassenavnet på den tabel tickerkoderne i, nummer på den kolonne i tabellen
# tickerkoderne ligger i, og navnet på den fil programmet skal ligge
# tickerkoderne i
# ticker_indexes = [['dk_large_cap', 'http://www.nasdaqomxnordic.com/index/index_info?Instrument=SE0001776667',
#                   'tablesorter tablesorter-default', 1, 'dk_large_cap_tickers.pickle']]
ticker_indexes = [['c25', 'https://en.wikipedia.org/wiki/OMX_Copenhagen_25',
                   'wikitable sortable', 2, 'c25_tickers.pickle'],
                  ['dax', 'https://en.wikipedia.org/wiki/DAX',
                   'wikitable sortable', 3, 'dax_tickers.pickle'],
                  ['sto30', 'https://da.wikipedia.org/wiki/OMXS30',
                  'wikitable sortable', 2, 'sto30_tickers.pickle'],
                  ['obx25', 'https://en.wikipedia.org/wiki/OBX_Index',
                   'wikitable sortable', 2, 'obx25_tickers.pickle'],
                  ['nasdaq100', 'https://www.cnbc.com/nasdaq-100/',
                   'data quoteTable', 0, 'nasdaq100.pickle']]


logging.basicConfig(filename='Share prices logfile.log', level=logging.INFO,
                    format='%(asctime)s: %(levelname)s: %(message)s')


def save_index_tickers(indexname, tickerpath, table_class_id, tickercol,
                       tickerlist):
    try:
        resp = requests.get(tickerpath)
        soup = bs.BeautifulSoup(resp.text, 'lxml')
        table = soup.find('table', {'class': table_class_id})
        tickers = []
        for row in table.findAll('tr')[1:]:
            ticker = row.findAll('td')[tickercol].text.replace('.', '-')
            ticker = ticker.strip('\n')
            if (indexname == 'sto30') or (indexname == 'obx25'):
                ticker = ticker[1:]
            tickers.append(ticker)
            print(ticker)

        with open('C:\\Users\\Johnn\\Desktop\\FA Sheet\\pickle/' + tickerlist, "wb") as f:
            pickle.dump(tickers, f)
        logging.info(str(indexname) + ' ' + str(tickerlist) + ' OK')
        return tickers
    except Exception as e:
        logging.warning(str(indexname) + str(tickerlist) + str(e))


# save__screendump
def get_scrdump_from_stop(indexname, tickerpath, table_class_id, tickercol,
                          tickerlist, reload=False):
    try:
        if reload:
            logging.info('RELOAD ' + str(indexname) + str(tickerlist))
            tickers = save_index_tickers(indexname, tickerpath, table_class_id,
                                         tickercol, tickerlist)
        else:
            with open('C:\\Users\\Johnn\\Desktop\\FA Sheet\\pickle/' + tickerlist, "rb") as f:
                tickers = pickle.load(f)
            if not os.path.exists('C:\\Users\\Johnn\\Desktop\\FA Sheet\\Sheet'):
                os.makedirs('C:\\Users\\Johnn\\Desktop\\FA Sheet\\Sheet')
# ******************************************************************************
        for ticker in tickers:
            obj = test.Test(var1)
            obj.setUp()
            obj.test_fullpage_screenshot()
            obj.tearDown()
#*******************************************************************************
        logging.info(str(indexname) + ' Sheet downloaded OK')
    except Exception as e:
        logging.warning(str(indexname) + str(tickerlist) + str(e))



def main(ticker_indexes):

    for ticker_index in ticker_indexes:
        print('*****')
        print(ticker_index[0])
        print('*****')
        save_index_tickers(ticker_index[0], ticker_index[1], ticker_index[2],
                           ticker_index[3], ticker_index[4])

        get_scrdump_from_stop(ticker_index[0], ticker_index[1], ticker_index[2],
                              ticker_index[3], ticker_index[4])

    logging.info('Finished')


main(ticker_indexes)

1 Ответ

0 голосов
/ 12 января 2020

импортировать ваш файл как таковой

  • Если класс импорта находится в другом каталоге.
import dir1.dir2.filename
  • если вы вызываете класс из файла, созданного в том же каталоге
import filename

Чтобы создать объект класса вашего файла.

obj = filename.Test(var1)

Тогда остальная часть кода будет выглядеть следующим образом.

obj.setUp()
obj.test_fullpage_screenshot()
obj.tearDown()

Если вам интересно, что означает в себе self в коде.

  • Чтобы выполнить функцию в классе, вам нужен первый аргумент, который является собственным объектом класса self .

  • почему мы делаем это так, чтобы вы не будет вызывать класс таким образом без создания экземпляра объекта.

filename.Test.setUp()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...