Jump to content

Ryan Zimerman Leite

Membros
  • Contagem de Conteúdo

    106
  • Ingressou

  • Última visita

  • Dias Ganhos

    6

Ryan Zimerman Leite ganhou o dia em Outubro 28

Ryan Zimerman Leite teve o conteúdo mais curtido!

1 Seguidor

Informações Pessoais

  • Cidade
    Campinas
  • Estado
    São Paulo (SP)

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não
  • Você é um parceiro da Casa do Desenvolvedor?
    Não

Visitantes Recentes do Perfil

284 visualizações do perfil

Conquistas de Ryan Zimerman Leite

  1. Bom dia, @edudtik tok legal seu projeto, poderia me dar mais informações sobre esse chat bot.
  2. @Luizdias Eu tive alguns scritps de automação no E-cac a um tempo atrás, porém o site do ecac começou a pegar os meus robôs, você poderia compartilhar seu código comigo?
  3. @al1001 import os # Pega a pasta atual posicao_atual = os.getcwd() # Obtém a pasta pai pasta_pai = os.path.dirname(posicao_atual) # Muda para a pasta pai os.chdir(pasta_pai) ou import os # Muda diretamente para a pasta pai os.chdir("..")
  4. @ARLEY def remover_listas_por_nome(dados, nomes): # Convertendo o(s) nome(s) para uma lista caso seja um único nome if isinstance(nomes, str): nomes = [nomes] # Filtrando a lista de dados para manter apenas as sublistas que não contêm os nomes dados_filtrados = [item for item in dados if item[0] not in nomes] return dados_filtrados # Lista de dados dados = [ ["ANA", "SAO PAULO", 33, "ESTUDANTE"], ["MARCOS", "RIO DE JANEIRO", 28, "ADVOGADO"], ["RAFAEL", "PERNAMBUCO", 34, "ESTUDANTE"], ["RICARDO", "ACRE", 34, "VENDEDOR"] ] # Exemplo de uso com um nome dados_atualizados = remover_listas_por_nome(dados, "ANA") print(dados_atualizados) # Exemplo de uso com vários nomes dados_atualizados = remover_listas_por_nome(dados, ["ANA", "MARCOS"]) print(dados_atualizados)
  5. @jamescidrao Esse erro é comum quando o ambiente de desenvolvimento não tem os compiladores C++ necessários para construir pacotes Python que dependem de extensões em C/C++. No caso, o erro está mencionando especificamente a falta do Microsoft Visual C++ Build Tools, que é necessário para compilar o PyQt6-sip. Aqui estão alguns passos que podem resolver o problema: 1. Instale o Microsoft Visual C++ Build Tools: Acesse Microsoft Visual C++ Build Tools e baixe a ferramenta. Durante a instalação, certifique-se de selecionar a opção para instalar o "Desktop development with C++". Após a instalação, reinicie o computador para garantir que todas as variáveis de ambiente estejam configuradas corretamente. 2. Verifique a Versão do Python e do Pip: Atualize o pip com o comando: python -m pip install --upgrade pip Verifique se a versão do Python é compatível com o PyQt6 (versão 3.8 ou superior). 3. Reinstale o PyQt6 com a Flag --no-cache-dir: Tente instalar o PyQt6 com a flag --no-cache-dir para evitar o uso de versões de cache que possam estar corrompidas: python -m pip install PyQt6 --no-cache-dir 4. Verifique o Ambiente Virtual: Se estiver usando um ambiente virtual, verifique se ele está ativado e se todos os comandos estão sendo executados dentro desse ambiente. 5. Instale uma Versão Pré-compilada: Se tudo isso falhar, tente instalar uma versão pré-compilada do PyQt6 diretamente dos pacotes .whl disponíveis no site PyPI (Python Extension Packages for Windows). Faça o download da versão específica para sua versão do Python e instale-a com: python -m pip install caminho/do/arquivo.whl
  6. @bruno_barros Identificar a requisição de verificação de licença: Analise os arquivos do SwiftPanel para encontrar a parte do código onde ele faz a verificação da licença. Normalmente, isso é feito por uma função que se conecta a um servidor externo. Criar um arquivo PHP que simule a resposta: Esse arquivo pode ser configurado para retornar uma resposta que o painel reconheça como válida. Por exemplo: <?php header('Content-Type: application/json'); echo json_encode(array("status" => "valid")); ?> Modificar o código para redirecionar a verificação: Alterar a chamada de verificação de licença para apontar para o script local em vez de para o servidor remoto. Banco de dados MySQL: Se o painel precisar de algum registro específico no banco de dados, pode ser necessário criar uma tabela que mantenha as informações de licença que a aplicação espera encontrar.
  7. @MarcDOlá é possivel sim qual o sistema que emite as NF que você utiliza?
  8. 1. O que é o Business Model Canvas? O Business Model Canvas é uma representação gráfica que permite esboçar e discutir modelos de negócio de forma rápida e colaborativa. Ele é uma alternativa ao tradicional plano de negócios e ajuda as equipes a entenderem, desenvolverem e aperfeiçoarem a proposta de valor e estrutura de uma empresa. 2. Componentes do Business Model Canvas O Canvas é dividido em nove blocos principais, que representam diferentes aspectos de um modelo de negócio: Segmentos de Clientes (Customer Segments): Define para quem a empresa cria valor, quem são os clientes-alvo, e quais são os grupos de clientes mais importantes. Proposta de Valor (Value Proposition): Detalha o que a empresa oferece para solucionar problemas ou satisfazer necessidades dos clientes. Canais (Channels): Explica como a empresa vai entregar sua proposta de valor aos clientes. Pode incluir canais de venda, marketing e comunicação. Relacionamento com Clientes (Customer Relationships): Define o tipo de relacionamento que a empresa estabelece com os diferentes segmentos de clientes. Fontes de Receita (Revenue Streams): Descreve como a empresa ganha dinheiro com cada segmento de clientes. Recursos Principais (Key Resources): Lista os principais ativos necessários para que o modelo de negócio funcione, como tecnologia, pessoal, capital financeiro, etc. Atividades-Chave (Key Activities): Identifica as ações essenciais que a empresa precisa executar para entregar sua proposta de valor. Parcerias Principais (Key Partnerships): Define os parceiros e fornecedores com os quais a empresa colabora para criar valor e alcançar objetivos. Estrutura de Custos (Cost Structure): Detalha os principais custos envolvidos na operação do modelo de negócio. 3. Como Usar o Business Model Canvas? Imprimir ou projetar em uma parede: É comum usar um quadro grande ou até post-its para facilitar a visualização e modificação. Colaboração: Idealmente, o Canvas é preenchido de forma colaborativa por equipes, para garantir que todas as perspectivas sejam consideradas. Iteração: O Canvas deve ser atualizado conforme o negócio evolui ou conforme novos insights são obtidos. 4. Vantagens do Canvas Simplicidade e Visualização: Fácil de entender e usar, permitindo visualizar de forma clara todas as partes de um modelo de negócio. Flexibilidade: Pode ser adaptado rapidamente conforme surgem novas ideias ou mudanças. Colaboração: Incentiva o trabalho em equipe e a discussão aberta. Praticidade: Facilita a criação de um modelo de negócio inicial que pode ser expandido para um plano mais detalhado posteriormente. 5. Outras Variedades de Canvas Além do Business Model Canvas, existem outras metodologias de Canvas voltadas para diferentes propósitos: Lean Canvas: Focado em startups e projetos de inovação, dá ênfase a problemas, soluções e métricas-chave. Value Proposition Canvas: Concentra-se em detalhar a proposta de valor da empresa e como ela atende às necessidades dos clientes. Project Canvas: Usado para planejamento de projetos, ajudando a alinhar os objetivos, cronogramas e alocação de recursos. 6. Dicas para uma Implementação Eficaz Realize sessões de brainstorming com sua equipe para preencher o Canvas. Comece pelo bloco da Proposta de Valor e, em seguida, vá para os segmentos de clientes para garantir o alinhamento entre o que você oferece e quem você atende. Teste e ajuste: Lembre-se de que o Canvas não é uma ferramenta estática; deve ser revisto e ajustado regularmente.
      • 1
      • Curtir
  9. @Guilherme Freitas Silva Um pouco complexo, segue abaixo um codigo que consegui import sys from PySide6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton, QLineEdit, QLabel, QGraphicsView, QGraphicsScene, QGraphicsPolygonItem, QFormLayout) from PySide6.QtGui import QPolygonF, QPen, QFont from PySide6.QtCore import Qt, QPointF class RoomDesigner(QWidget): def __init__(self): super().__init__() self.init_ui() self.inputs = [] def init_ui(self): # Layout principal self.layout = QVBoxLayout() # Layout de formulário para inputs de metragens self.form_layout = QFormLayout() self.add_input_button = QPushButton("Adicionar Parede") self.add_input_button.clicked.connect(self.add_input_field) self.layout.addLayout(self.form_layout) self.layout.addWidget(self.add_input_button) # Botão para desenhar self.draw_button = QPushButton("Desenhar Planta") self.draw_button.clicked.connect(self.draw_room) self.layout.addWidget(self.draw_button) # Área de visualização gráfica self.graphics_view = QGraphicsView() self.scene = QGraphicsScene() self.graphics_view.setScene(self.scene) self.layout.addWidget(self.graphics_view) # Configuração da janela self.setLayout(self.layout) self.setWindowTitle("Desenhador de Plantas de Cômodos") self.resize(800, 600) def add_input_field(self): input_field = QLineEdit() input_field.setPlaceholderText("Comprimento (m)") self.inputs.append(input_field) self.form_layout.addRow(f"Parede {len(self.inputs)}:", input_field) def draw_room(self): # Limpa a cena anterior self.scene.clear() # Coleta e processa os dados de entrada try: lengths = [] for input_field in self.inputs: value = float(input_field.text()) if value <= 0: raise ValueError("Os comprimentos devem ser maiores que zero.") lengths.append(value) if len(lengths) < 3: raise ValueError("É necessário pelo menos 3 lados para formar um cômodo.") self.vertices = self.calculate_vertices(lengths) if self.vertices: polygon = QPolygonF([QPointF(x, y) for x, y in self.vertices]) item = QGraphicsPolygonItem(polygon) item.setPen(QPen(Qt.black, 0.1)) self.scene.addItem(item) # Adicionando rótulos de comprimento com fonte menor num_lengths = len(lengths) for i in range(min(len(self.vertices) - 1, num_lengths)): p1 = QPointF(*self.vertices[i]) p2 = QPointF(*self.vertices[i + 1]) mid_point = QPointF((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2) length_label = f"{lengths[i]:.2f} m" text_item = self.scene.addText(length_label) font = QFont("Arial", 8) # Fonte menor text_item.setFont(font) text_item.setPos(mid_point) # Ajusta a escala da cena para caber na visualização self.scene.setSceneRect(polygon.boundingRect()) self.graphics_view.setScene(self.scene) self.graphics_view.fitInView(self.scene.sceneRect(), Qt.KeepAspectRatio) except ValueError as e: error_label = QLabel(f"Erro: {e}") self.layout.addWidget(error_label) def calculate_vertices(self, lengths): # Lógica para calcular vértices conforme a forma da figura que você enviou x, y = 0, 0 vertices = [(x, y)] # Direções em sentido horário: direita, para baixo, esquerda, para cima directions = [(1, 0), (0, -1), (-1, 0), (0, 1)] dir_index = 0 for length in lengths: dx, dy = directions[dir_index % 4] x += dx * length y += dy * length vertices.append((x, y)) dir_index += 1 # Fecha o polígono se necessário if vertices[-1] != vertices[0]: vertices.append(vertices[0]) return vertices if __name__ == "__main__": app = QApplication(sys.argv) designer = RoomDesigner() designer.show() sys.exit(app.exec())
  10. @Rodrigo Zaruvne O erro está nessa linha EC.element_to_be_clickable((By.XPATH, "//a[@id='menuForm:planoOperadora']")) Perceba que o elemento tem um ID -> menuForm:planoOperadora, porém você esta passando By.XPATH o correto é By.ID dessa forma abaixo: EC.element_to_be_clickable((By.ID, "//a[@id='menuForm:planoOperadora']"))
  11. @Magliano Segue meu codigo abaixo que apertar em Uva e Envia o formulario, so colocar no seu pycharm ou vs code instalar as bibliotecas e rodar. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.common.exceptions import SessionNotCreatedException, WebDriverException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import chromedriver_autoinstaller import time import os import re def initialize_chrome(options=webdriver.ChromeOptions(), timeout=90): pasta_driver = 'driver' os.makedirs(pasta_driver, exist_ok=True) service = Service(pasta_driver) contador = 1 while True: for pasta_atual, subpastas, arquivos in os.walk(pasta_driver): # Agora você pode processar os arquivos na pasta atual normalmente for file in arquivos: caminho_completo = os.path.join(pasta_atual, file) if caminho_completo == 'driver\chromedriver.exe': continue service = Service(caminho_completo) print('Chrome driver selecionado:', caminho_completo) if not options: options = webdriver.ChromeOptions() options.add_argument("--start-maximized") options.add_argument("--ignore-certificate-errors") options.add_experimental_option('excludeSwitches', ['enable-logging']) # retorna o chromedriver aberto try: print('>>> Inicializando Chromedriver...') driver = webdriver.Chrome(options=options, service=service) driver.set_page_load_timeout(timeout) break except SessionNotCreatedException: print('>>> Atualizando Chromedriver...') time.sleep(1) os.makedirs(pasta_driver, exist_ok=True) # biblioteca para baixar o chromedriver atualizado try: pasta_driver = f'driver {contador}' chromedriver_autoinstaller.install(path=pasta_driver) except: contador += 1 continue except WebDriverException: print('>>> Baixando Chromedriver...') os.makedirs(pasta_driver, exist_ok=True) # biblioteca para baixar o chromedriver atualizado try: chromedriver_autoinstaller.install(path=pasta_driver) except: try: pasta_driver = f'driver {contador}' chromedriver_autoinstaller.install(path=pasta_driver) except: contador += 1 return True, driver _initialize_chrome = initialize_chrome def find_by_id(item, driver): try: driver.find_element(by=By.ID, value=item) return True except: return False _find_by_id = find_by_id def find_by_path(item, driver): try: driver.find_element(by=By.XPATH, value=item) return True except: return False _find_by_path = find_by_path def login(driver): url = 'https://docs.google.com/forms/d/e/1FAIpQLSeEa4j7v1TeLg_2saE69UlBl6nguydp88aNkV6T4wL6IF66ng/viewform' print('>>> Acessando site') timer = 0 timer_erro = 0 try: # Tenta acessar o site driver.get(url) except: return driver, 'erro' # ENQUANTO NÃO ENCONTRAR BOTAO DE ENVIAR while not _find_by_path('/html/body/div/div[2]/form/div[2]/div/div[3]/div/div[1]/div/span', driver): print('🕤') time.sleep(1) timer += 1 timer_erro += 1 if timer > 10: timer = 0 try: # Tenta acessar o site driver.get(url) except: return driver, 'erro' if timer_erro > 60: return driver, 'erro' return driver def envia_formulario(driver): xpath_uva = '/html/body/div/div[2]/form/div[2]/div/div[2]/div/div/div/div[2]/div[1]/div/span/div/div[3]/label/div/div[2]/div/span' WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath_uva))) uva_elemento = driver.find_element(By.XPATH, xpath_uva) driver.execute_script("arguments[0].click();", uva_elemento) time.sleep(2) xpath_enviar = '/html/body/div/div[2]/form/div[2]/div/div[3]/div/div[1]/div/span' WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath_enviar))) enviar_elemento = driver.find_element(By.XPATH, xpath_enviar) driver.execute_script("arguments[0].click();", enviar_elemento) time.sleep(2) while True: # Captura o HTML da página source = driver.page_source # Usa regex para procurar a mensagem "Salvo com sucesso" success_match = re.search(r"Sua resposta foi registrada.", source) error_match = re.search(r"Erro", source) # Ajuste o texto para a mensagem de erro que deseja capturar if success_match: return "Sucesso" # Retorna 'Sucesso' se a mensagem for encontrada elif error_match: return "Erro" # Retorna 'Erro' se a mensagem de erro for encontrada else: time.sleep(1) def run(): status, driver = _initialize_chrome(options) driver.set_page_load_timeout(60) driver = login(driver) resultado = envia_formulario(driver) print(resultado) if __name__ == "__main__": options = webdriver.ChromeOptions() options.add_argument("--start-maximized") options.add_argument('--disable-blink-features=AutomationControlled') run()
  12. @nrbneto Olá Bom dia, muito legal sua ideia, gostaria de fazer parte do time. Vou entrar em contato com você pelo whatsapp.
  13. @ARLEY Codigo usando TKinter import tkinter as tk class MainWindow(tk.Tk): def __init__(self, items): super().__init__() # Armazenando os campos de entrada self.entry_fields = {} # Para cada item na lista, crie um label, um botão e um campo de entrada for index, item in enumerate(items): # Cria um label com o nome do item label = tk.Label(self, text=item) label.grid(row=index, column=0, padx=5, pady=5) # Cria um botão para copiar o nome do item copy_button = tk.Button(self, text="Copiar", command=lambda text=item: self.copy_text(text)) copy_button.grid(row=index, column=1, padx=5, pady=5) # Cria um campo de entrada para exibir o nome copiado entry_field = tk.Entry(self) entry_field.grid(row=index, column=2, padx=5, pady=5) # Armazena o campo de entrada associado ao item self.entry_fields[item] = entry_field def copy_text(self, text): # Cola o texto no campo de entrada correspondente self.entry_fields[text].delete(0, tk.END) # Limpa o campo antes de inserir self.entry_fields[text].insert(0, text) if __name__ == "__main__": # Aqui você pegaria os itens do banco de dados, no exemplo é uma lista fixa items = ["Maçã", "Banana", "Grão de Bico", "Teste 1", "Teste 2", "Teste"] # Criação da janela principal window = MainWindow(items) window.title("Interface Dinâmica Tkinter") window.geometry("400x200") window.mainloop()
  14. @ARLEY Veja se funciona para você. import sys from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QLineEdit, QHBoxLayout class MainWindow(QWidget): def __init__(self, items): super().__init__() # Layout principal self.layout = QVBoxLayout() # Dicionário para armazenar os campos de texto self.text_fields = {} # Para cada item na lista de dados, crie um label, botão e campo de texto for item in items: row_layout = QHBoxLayout() # Cria um label com o nome do item label = QLabel(item) row_layout.addWidget(label) # Cria um botão com a funcionalidade de copiar o nome do item copy_button = QPushButton("Copiar") copy_button.clicked.connect(lambda checked, text=item: self.copy_text(text)) row_layout.addWidget(copy_button) # Cria um campo de texto onde o nome será colado text_field = QLineEdit() self.text_fields[item] = text_field row_layout.addWidget(text_field) # Adiciona a linha ao layout principal self.layout.addLayout(row_layout) self.setLayout(self.layout) def copy_text(self, text): # Cola o texto no campo de texto correspondente self.text_fields[text].setText(text) if __name__ == "__main__": app = QApplication(sys.argv) # Aqui você pegaria os itens do banco de dados, como exemplo usei uma lista items = ["Maçã", "Banana", "Grão de Bico", "Teste 1", "Teste 2", "Teste"] window = MainWindow(items) window.show() sys.exit(app.exec())
  15. @Rayson Daniel soma_idades = 0 # Inicializa a variável de soma # Usando um laço for para repetir 20 vezes for i in range(20): idade = int(input("Digite a idade da pessoa: ")) # Lê a idade do usuário soma_idades += idade # Soma a idade à variável soma_idades print(f"A soma das idades é: {soma_idades}") # Exibe o resultado
×
×
  • Create New...