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

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

Все теги (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 комментариев
  • Как приконектиться к базе 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 комментария
  • Как исправить ошибку при создании таблицы SQLAlchemy?

    nullnull
    @nullnull
    Возможно, проблема в пути к бд.
    Попробуйте заменить это

    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tmp/dpd_test.db '


    на это

    import os
    app.config['SQLALCHEMY_DATABASE_URI'] =  'sqlite:///' + os.path.join( os.path.abspath(os.path.dirname(__file__)), 'mydb.db' )


    Тут в os.path.join можно после os.path.abspath. через запятую, указать папки и название файла как угодно, разумеется.
    Ответ написан
    8 комментариев

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

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