Как правильно закрыть экземпляр Selenium WebDriver в python? - PullRequest
0 голосов
/ 03 июля 2018

Я пишу скрипт, который проверит, работает ли прокси. Программа должна: 1. Загрузите прокси из списка (txt). 2. Перейти на любую страницу (например, википедию) 3. Если страница загружена (даже не полностью), она сохраняет данные прокси в другой текстовый файл.

Все должно быть в цикле. Он также должен проверить, отображал ли браузер ошибку. У меня проблема с тем, чтобы всегда выключать предыдущий браузер каждый раз, после нескольких циклов, несколько браузеров уже открыты.

Ps. Я заменил итерацию случайным числом

from selenium import webdriver
import random
from configparser import ConfigParser
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import traceback

while 1:
    ini = ConfigParser()
    ini.read('liczba_proxy.ini')

    random.random()
    liczba_losowa = random.randint(1, 999)

    f = open('user-agents.txt')
    lines = f.readlines()
    user_agent = lines[liczba_losowa]
    user_agent = str(user_agent)

    s = open('proxy_list.txt')
    proxy = s.readlines()

    i = ini.getint('liczba', 'liczba')

    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--proxy-server=%s' % proxy[liczba_losowa])
    chrome_options.add_argument(f'user-agent={user_agent}')
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\Python\Driver\chromedriver.exe')
    driver.get('https://en.wikipedia.org/wiki/Replication_error_phenotype')

    def error_catching():
        print("error")
        driver.stop_client()
        traceback.print_stack()
        traceback.print_exc()
        return False


    def presence_of_element(driver, timeout=5):
        try:
            w = WebDriverWait(driver, timeout)
            w.until(EC.presence_of_element_located((By.ID, 'siteNotice')))
            print('work')
            driver.stop_client()
            return True
        except:
            print('not working')
            driver.stop_client()
            error_catching()

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Использование

chrome_options.quit()

Obs .: Я уверен, что вы не должны использовать такие тестовые сценарии ... "в то время как 1"? так у тебя тест никогда не закончится?

Полагаю, вам следует настроить свои тесты в TestCases и вызвать TheSuite для тестирования всех ваших тестовых наборов и дать вам один отзыв о том, хотите ли вы пройти или нет, и, возможно, настроить один cronjob, чтобы время от времени вызывать его.

Вот один мой простой пример, использующий тестовые сценарии с django и splinter (splinter построен поверх селена)

https://github.com/Diegow3b/python-django-basictestcase/blob/master/myApp/tests/test_views.py

0 голосов
/ 03 июля 2018

Не комментируя ваш дизайн кода:

Чтобы закрыть экземпляр драйвера , используйте driver.close() или driver.quit() вместо driver.stop_client().

Первый закрывает окно браузера, на котором установлен фокус. Второй в основном закрывает все окна браузера и корректно завершает сеанс WebDriver.

...