Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (10)

Лучшие ответы пользователя

Все ответы (13)
  • Как нажать на кнопку "см. ещё" в вакансиях inkedin с помощью selenium?

    nullnull
    @nullnull
    Я вам подкину парочку мыслей, вдруг что-то получится:

    1. Сейчас веб-фреймворки эти id генерируют на лету, т.е. динамический id получается. Либо другой XPath использовать, либо селекторы, либо XPath по типу "//путь до элемента/тег[contains(@id, "ember")]".Такая же проблема может быть с классами (там где используются числа или же какие-то непонятные символьные генерации).

    Чтобы проверить что видит selenium: просто запустите в дебаге, поставьте точку остановки и f12 (или ctrl + shift + c) по коду элемента в браузере. Возможно, вы увидите, почему клик не отрабатывает.
    Так же вы можете в браузере запустить поиск по XPath (зайти в просмотр кода элемента f12 и там уже ctrl + f) и проверить - корректный ли XPath для selenium.

    2. Возможно wait_and_click работает не совсем так. Однажды у меня была такая история, когда это ожидание не работало. Голову сломала, но хорошего решения не нашла. Оказалось, самое простое, что могло бы прийти в голову, помогло. Я сделала цикл while и в нём в течение 5-10 секунд пыталась нажать, если не нажимается, а я точно знаю, что такая кнопка на странице есть, то я делала питоновский time sleep(1).
    Проблема была в том, что библиотеки для отработки кнопки прилетали позже, возможно фоном, хотя страница загружена, JS тоже.
    Ответ написан
    Комментировать
  • Есть ли таблица сравнения языков программирования?

    nullnull
    @nullnull
    https://ru.wikipedia.org/wiki/Сравнение_языков_про...

    https://habr.com/ru/company/skillfactory/blog/531360/

    такое?

    Если выбираете для себя "какой ЯП учить". то сначала определитесь "куда и зачем", а там уже и сравнивайте.
    А то у вас сейчас "мне надо сравнить щуку, рака и лебедя, но я не знаю зачем, но надо".

    Т.к. ЯП бывают разными: по типу запуска или их структуре, по области применения. и т.д. И иногда это сравнивать как тёплое с мягким - не корректно :)
    Ответ написан
    7 комментариев
  • Какую технику тех дизайна применить?

    nullnull
    @nullnull
    Вот есть такая задачка, я понимаю что здесь нужно использовать технику "Тест дизайна" - "Граничные значения", насколько это правильно?

    "Граничные значения" и можно ещё "классы эквивалентности", грубо говоря, сгруппировать примеры.
    Так что да, верно.

    Я думаю проверить следует следующие значения:
    -1/0/1/599/600/601/1999/2000/2001/2999/3000/3001/max


    Полагаю, случай с 600 спорный для "минимального набора". Объясню почему.

    у вас есть следующие границы: 0-1999 = 0%
    2000 - 2999 = 2%
    3000 - inf = 5%

    Т.е. используя идею граничный значений 600 долларов это не совсем граница, где меняются проценты.
    А ещё можно сюда внести "класс эквивалентности", типа кратный или не кратны 600, например,
    чем 599 отличается от 1? да ничем с т.з. 600 и 599 или 600 и 1.
    Оба варианта (599 и 1) это не 600 и находятся в границах 0-599.

    Поэтому из минимального набора я бы этот вариант выкинула.
    Действуя такому принципу, некоторые тоже бы выкинула, оставив эти варианты:
    1. -1, 0, 1
    2. 1999, 2000, 2001
    3. 2999, 3000, 3001


    Граничные условия - это проверка условий, вида:
    if a < b < c:
        do_something
    else:
        do_something


    И наиболее часто встречаемые тут ошибки - это путают знаки (человеческий фактор) или забывают поставить знак = или, наоборот, добавляют, когда не надо (это уже слабая математика, множества).

    И в случае подобных задач, надо проверить - входит ли элемент в какое-то множество или нет. И если входит, то надо ещё понять, в какое множество он входит.
    Например. там стоит такая ошибка: x > 3000 = 5%, т.е. тут пример, когда забыли поставить "=" и значение 3000 попало в раздел "2%" или куда-то ещё, но не в 5%.

    Отдельно можно ещё проверить всякие дробные значения, например,
    1999,99 - это 1999 или 2000? округление в какую сторону будет, если будет? Т.е. обратить внимание на типы данных. Хотя бы 1 тест, если криво, то криво будет везде.

    Но вот как оформить тест кейсы, не совсем понимаю.

    https://www.software-testing.ru/library/testing/ge...

    Как пример оформления. Если у вас в задании не указано что-то конкретное, то подгуглить и использовать шаблон.
    Обязательно указывайте что вводите (те примеры) и что ожидаете от таких ответов.
    Ответ написан
    3 комментария
  • Как приконектиться к базе 1 раз?

    nullnull
    @nullnull
    Из-за того, что параметр называется также, как глобальная переменная, вот и не работает.
    Примерно должно быть так:

    UPD: исправлен пример, спасибо MinTnt за внимательность
    import sqlite3
    
    db = sqlite3.connect('base.db')
    cursor = db.cursor()
    
    def  add():
        a = 1
        cursor.execute('INSERT INTO base(number) VALUES("{}")'.format(a))
    
    def change():
        pass
    
    add()


    А ещё лучше в if-name-main стиле:
    https://ru.stackoverflow.com/questions/515852/
    import sqlite3
    
    def  add(cursor):
        a = 1
        cursor.execute('INSERT INTO base(number) VALUES("{}")'.format(a))
    
    def change(cursor):
        pass
    
    if __name__ == "__main__":
        db = sqlite3.connect('base.db')
        cursor = db.cursor()
        add(cursor)
    Ответ написан
  • Как записать данные функции в файл?

    nullnull
    @nullnull
    Ой, я немного приведу код в if-name-main стиль, такую смесь функций и глобальных строк трудно читать :)))


    К сожалению код не запускала, но попробуйте что-то в этом духе :)
    import requests as r 
    from bs4 import BeautifulSoup as bs
    
    def parse_eng(soup, num, skipNum):
      result = []
      for i in num:
        if i  not in skipNum:
          words_eng = soup.find('span', class_ = 'highlightLine puzEng line'+str(i)).get_text()
          # print(words_eng)
          result.append(words_ru)
      return result # возвращаем список строк
    
       
            	
    def parse_ru(soup, num, skipNum):
      result = []
      for i in num:
        if i  not in skipNum:
          words_ru = soup.find('span', class_ = 'highlightLine line'+str(i)).get_text()
          # print(words_ru)
          result.append(words_ru)
      return result
    
    
    # та самая функция для сохранения результатов в файл
    def saveFile(fileName, data):
      file = open(fileName, 'w', encoding='utf-8')
      file.writelines(data)
      # если запишет всё в одну строчку, без переносов, 
      # то можно через цикл с write(),
      file.close()
    
    
    if __name__ == '__main__':
      url = 'https://en.lyrsense.com/lil_peep/nuts'
      res = r.get(url)
    
      if res.status_code !=  200  :
        print('ERROR')
        return # если подразумевается, что дальше не используете программу
        # можно заменить на else
    
      skipNum = [7,12]
    
      soup = bs(res.text, 'html.parser')
    
      num = range(1,24)
    
      title = soup.find('h2', class_ = 'hs').get_text()
      print('$Название песни$ - ', title )
    
      
      data = parse_ru(soup, num, skipNum)
      saveFile(title + '.txt', data)
    
    
    
      '''chose = input('Выберите язык текста : ')
      if chose == 'англ':
        data = parse_eng(soup, num, skipNum)
        saveFile(title + '.txt', data)
      elif chose == "рус":
        data = parse_ru(soup, num, skipNum)
        saveFile(title + '.txt', data) '''
    
      print('///Cохраненно в', title +  '.txt', '///')
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (8)