Selenium python - если мой скрипт завершится неудачно до вызова driver.close (), и я снова вызову функцию, у меня будут открыты два драйвера? - PullRequest
0 голосов
/ 06 марта 2019

В качестве второго вопроса, если у меня одновременно работают два отдельных сценария selenium, могут ли они мешать друг другу или они создают отдельные экземпляры?

Я фактически использую их для входа в систему.мой банкЯ обеспокоен тем, что, если я нахожусь на полпути к входу в систему (три отдельные страницы), а затем второй сценарий пытается запустить его с самого начала, вещи могут запутаться.

По вопросу я включил свою функцию:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
import time
import json
import traceback

def scrapeBank(bank, return_dict):

    try:

        remote = 1
        debug = 0

        if remote == 1:
            from pyvirtualdisplay import Display
            display = Display(visible=0, size=(800, 600))
            display.start()
            options = webdriver.ChromeOptions()
            options.add_argument('--no-sandbox')
            options.add_argument('--disable-extensions')
            options.add_argument('--headless')
            options.add_argument('--disable-gpu')
            driver = webdriver.Chrome(chrome_options=options)
        else:
            driver = webdriver.Chrome()

        [do a bunch of stuff]

        print('Bank Scrape completed')  
        driver.close()
        return_dict['transactions'] = transactions


    except:
        print(traceback.format_exc())
        driver.close()

1 Ответ

0 голосов
/ 06 марта 2019

Пока вы создаете новый экземпляр / объект, вы можете запускать его даже в том же сценарии (вам не нужно запускать сценарий снова)

Если вы запускаете свой скрипт несколько раз, python будет создавать новый объект каждый раз, когда вы его запускаете, поэтому вы не можете управлять другим драйвером

Вот как вы можете создать 1 объект:

driver = webdriver.Chrome('/path/to/chromedriver')  

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

driver1 = webdriver.Chrome('/path/to/chromedriver')  
driver2 = webdriver.Chrome('/path/to/chromedriver')  
driver3 = webdriver.Chrome('/path/to/chromedriver')  
driver4 = webdriver.Chrome('/path/to/chromedriver')  

тогда вы можете использовать их следующим образом:

driver1.get('http://www.google.com')
driver2.get('http://www.youtube.com')
driver3.get('http://www.facebook.com')
driver4.get('http://www.stackoverflow.com')

Для вашего кода у вас нет базовых знанийо ключевых словах и как они на самом деле работают.try означает, что он собирается делать код, и в случае ошибки он будет делать то же, что и в except.Тогда у вас есть бесполезное условие: if remote == 1: это всегда верно, потому что 2 строки выше это: remote = 1 ... в любом случае ваш вопрос немного отличается ... Вы спрашиваете, используете ли вы эту функцию, если браузерысобираемся прервать друг друга ... ответ NO, как я объяснил выше, каждый раз, когда вы создаете новый экземпляр / объект, это совершенно новый driver.Причина почему здесь: driver = webdriver.Chrome(chrome_options=options)

try:
    remote = 1
    debug = 0
    if remote == 1:
        from pyvirtualdisplay import Display
        display = Display(visible=0, size=(800, 600))
        display.start()
        options = webdriver.ChromeOptions()
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-extensions')
        options.add_argument('--headless')
        options.add_argument('--disable-gpu')
        driver = webdriver.Chrome(chrome_options=options)
    else:
        driver = webdriver.Chrome()

    [do a bunch of stuff]

    print('Bank Scrape completed')  
    driver.close()
    return_dict['transactions'] = transactions
except:
    print(traceback.format_exc())
    driver.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...