• Лучшее решение для разворачивания сервера под веб-разработку?

    @Drno
    самый простейший вариант, и одновременно приближенный к хостингу - виртуализация.

    Ставим виртуалбокс
    ставим любимый линукс
    пользуемся, радуемся.

    но лично я давно перешел на lxc контейнере внутри линукса, чтобы переносить было удобно проекты
    Ответ написан
    2 комментария
  • Написание сайтов на разных платформах?

    Sanes
    @Sanes
    Использовать относительные пути.
    Ответ написан
    Комментировать
  • Как обменять символ в строке с последующим символом?

    @pshevnin
    for k in range(len(numbers) - 1):
        if k % 2 != 0:
            numbers[k] = numbers[k + 1]


    Вроде так, если я правильно понял задание
    Ответ написан
    Комментировать
  • Как оптимизировать данный код на python - selenium?

    sswwssww
    @sswwssww
    setUp вызывается перед каждым тестовым методом, т.е. у тебя он вызывается 14 раз, как и tearDown. Замени его на setUpClass, который будет вызван всего 1 раз. И соответственно, tearDown меняешь на tearDownClass.
    И конечно меняешь свои тесты (например убери лишние self.driver.set_window_size(1920, 1080) и т.п. в каждом методе, просто переместив это в setUpClass). Это все ОЧЕНЬ сильно сэкономит время.

    Либо, чтобы убрать дублирование кода можно воспользоваться контекстным менеджером subTest:
    import unittest
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    URL = 'https://psy.edu.ru/'
    
    
    class check_psyedu(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome(r'C:\Users\Алексей\YandexDisk\Job\Python\Test\chromedriver\chromedriver.exe')
            self.driver.set_window_size(1920, 1080)
    
        def test_1(self):
            names = ("aleksei", "Алексей", " Рынденков Алексей",)
            for name in names:
                # тут name просто как название теста, чтобы когда тест не прошёл было наглядно видно где споткнулся
                with self.subTest(name):  
                    self.driver.get(URL)
                    self.driver.find_element(By.NAME, "name").send_keys(name)
                    self.driver.find_element(By.CSS_SELECTOR, ".btn").click()
                    assert self.driver.find_element(By.CSS_SELECTOR,
                                                    ".still-quest_item:nth-child(1) > .err_message").text == "Напишите русскими буквами!"
                    assert self.driver.find_element(By.CSS_SELECTOR, ".err_message:nth-child(3)").text == "Обязательное поле!"
                    assert self.driver.find_element(By.CSS_SELECTOR, ".still-quest_item:nth-child(3)").text == "Обязательное поле!"
    
        def tearDown(self):
            self.driver.close()
            self.driver.quit()
    
    
    if __name__ == "__main__":
        unittest.main()

    Есть еще третий вариант, использовать декоратор добавляющий возможность запускать одну и ту же тестовую функцию с разными аргументами. В pytest такая "фича" встроена, в unittest нужно использовать библиотеку parameterized.
    Пример:
    @parameterized([
        (2, 2, 4),
        (2, 3, 8),
        (1, 9, 1),
        (0, 9, 0),
    ])
    def test_pow(base, exponent, expected):
       assert_equal(math.pow(base, exponent), expected)
    Ответ написан
    3 комментария
  • Ошибка при парсинге?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Можно обернуть пополнение списка в конструкцию try / except , непременно указав правильный exception, тот самый, который сейчас вам мешает (иначе потом вы придёте с вопросом «программа падает без сообщения об ошибках»).
    Ответ написан
    5 комментариев
  • Как записать спарсенные данные в json?

    ScriptKiddo
    @ScriptKiddo
    Как записать спарсенные данные в json?

    import json
    
    result = [1, 2, 3, 'Тестовый текст']
    
    with open('result.json', 'w', encoding='utf8') as f:
        json.dump(result, f, ensure_ascii=False)


    Как перейти на следующую страницу для парсинга:
    Добавлять в ссылку номер страницы. Можно через сложение строк, можно через f-строки

    https://pentaschool.ru/trainer/p/4

    page = 1
    test = f'test/page/{page}'
    Ответ написан
    Комментировать