Jump to content

Ryan Zimerman Leite

Membros
  • Contagem de Conteúdo

    21
  • Ingressou

  • Última visita

  • Dias Ganhos

    2

Ryan Zimerman Leite ganhou o dia em Julho 10

Ryan Zimerman Leite teve o conteúdo mais curtido!

Informações Pessoais

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

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não

Visitantes Recentes do Perfil

O bloco de visitantes recentes está desativado e não está sendo mostrado a outros usuários.

Conquistas de Ryan Zimerman Leite

  1. import os import re import requests from bs4 import BeautifulSoup import time import warnings import re from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager warnings.filterwarnings('ignore') options = webdriver.ChromeOptions() # # options.add_argument('--headless') # options.add_argument('--no-sandbox') # options.add_argument('--disable-dev-shm-usage') service = Service(ChromeDriverManager().install()) chrome = webdriver.Chrome(service=service) chrome.implicitly_wait(3) print('\n') print('Lista de Jogos') print('\n') # Não detectar automação url = 'https://betwatch.fr/money' headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \ (KHTML, like Gecko) Chrome / 86.0.4240.198Safari / 537.36" } chrome.get(url) # Wait for the page to load WebDriverWait(chrome, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="refresh-dropdown"]'))) # Click on refresh dropdown chrome.find_element(By.XPATH, '//*[@id="refresh-dropdown"]').click() # Wait for refresh options to appear WebDriverWait(chrome, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="refresh-dropdown"]/option[2]'))) # Click on "Live" option chrome.find_element(By.XPATH, '//*[@id="refresh-dropdown"]/option[2]').click() # Wait for the page to update WebDriverWait(chrome, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="matchs"]'))) # Scroll to the bottom of the page last_height = chrome.execute_script("return document.body.scrollHeight") while True: chrome.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) # Adjust the sleep duration as needed new_height = chrome.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height games = chrome.find_elements(By.XPATH, '/html/body/div/div/div[@class="container"]/div[@id="matchs"]/div') # Capture data using regex for game in games: # Explicitly wait for the "issue-header" element to be present WebDriverWait(chrome, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@class="issue-header"]'))) # Find the specific element that contains the relevant data match_element = game.find_element(By.XPATH, './div[@class="match-issues slider"]/section/div/div[@class="issue-header"]') text = match_element.text # Regex to capture data from the text regex = re.compile(r""" (?P<time>\d{2}:\d{2})\s* (?P<event>[^\n]+)\s* (?P<teams>[^\n]+)\s* (?P<section1>[^\n]+)\s* (?P<one_value>[\d\s]+€)\s* (?P<one_percentage>\d+%)\s* (?P<one_change>[\d.]+)\s* (?P<sectionX>[^\n]+)\s* (?P<x_value>[\d\s]+€)\s* (?P<x_percentage>\d+%)\s* (?P<x_change>[\d.]+)\s* (?P<section2>[^\n]+)\s* (?P<two_value>[\d\s]+€)\s* (?P<two_percentage>\d+%)\s* (?P<two_change>[\d.]+) """, re.VERBOSE) # Applying the regex to the text match = regex.search(text) if match: data = match.groupdict() # Organizing data in a structured format result = f""" {data['time']} | {data['event']} | {data['teams']} {data['section1']}: {data['one_value']} ({data['one_percentage']}) {data['one_change']} {data['sectionX']}: {data['x_value']} ({data['x_percentage']}) {data['x_change']} {data['section2']}: {data['two_value']} ({data['two_percentage']}) {data['two_change']} """ print(result) else: print("Dados não encontrados") chrome.quit()
  2. coloque seu codigo aqui para pode auxiliar voce melhor
  3. Boa tarde @jcferreiraisso, o regex vai trabalhando dentro do seu for ou seja para cada informação que voce puxar no for ele vai procurar pelo regex se encontrar ele estrutura para voce
  4. Olá poderia mandar um pedaço da sua planilha excel e do template como vc gostaria que ficasse o resultado.
  5. Você pode utilizar regex para organizar isso em blocos aqui esta um exemplo: import re # Exemplo de texto text = """ 16:00 International : UEFA Euro 2024 Serbia - England 1 138 902€ 8% 7.6 X 158 625€ 9% 4.6 2 1 444 253€ 83% 1.53 """ # Regex para capturar os dados regex = re.compile(r""" (?P<time>\d{2}:\d{2})\s* (?P<event>[^\n]+)\s* (?P<teams>[^\n]+)\s* (?P<section1>[^\n]+)\s* (?P<one_value>[\d\s]+€)\s* (?P<one_percentage>\d+%)\s* (?P<one_change>[\d.]+)\s* (?P<sectionX>[^\n]+)\s* (?P<x_value>[\d\s]+€)\s* (?P<x_percentage>\d+%)\s* (?P<x_change>[\d.]+)\s* (?P<section2>[^\n]+)\s* (?P<two_value>[\d\s]+€)\s* (?P<two_percentage>\d+%)\s* (?P<two_change>[\d.]+) """, re.VERBOSE) # Aplicando o regex no texto match = regex.search(text) if match: data = match.groupdict() # Organizando os dados em um formato estruturado result = f""" {data['time']} | {data['event']} | {data['teams']} {data['section1']}: {data['one_value']} ({data['one_percentage']}) {data['one_change']} {data['sectionX']}: {data['x_value']} ({data['x_percentage']}) {data['x_change']} {data['section2']}: {data['two_value']} ({data['two_percentage']}) {data['two_change']} """ print(result) else: print("Dados não encontrados") Resultado:
  6. Uma sugestão que eu acredito, pode ser que por ser uma maquina virtual chega um momento que entra o descanso de tela, por isso de capturar a imagem preta, faça um script que mantenha a tela ativa, ou remova o descanso de tela pode ser que ajude.
  7. @Cristiano SantosMostre para gente a mensagem de erro que está dando o log de erros por essa imagem que você mandou não conseguimos saber o erro, envie também seu codigo completo para que podemos executar em nossas maquinas e descobrir a causa do erro e possivel solução
  8. Vou deixar algumas funções que você pode utilizar de imagens pelo pyautogui. Exemplo de como chamar as funções: _click_img('salvar.png', conf=0.9) - Clicka na imagem assim que ela aparecer _wait_img('salvar.png', conf=0.9) - Aguarda até a imagem aparecer while not _find_img('selecione_arquivo.png', conf=0.9): - Enquanto não achar a imagem faz uma ação. time.sleep(1) _click_position_img('conjunto_dados.png', '+', pixels_y=32, conf=0.9) - Clicka em algum ponto da tela se baseando em uma imagem, Ex: você quer clickar em algo que aparece do lado de uma imagem porem não sabe oque é ou muda constantemente, porém a imagem é fixa então eu coloquei para clickar 32 pixel acima da imagem. Segue abaixo agora as funções # Procura pela imagem img que atenda ao nível de correspondência conf # Retorna uma tupla com os valores (x, y, altura, largura) caso ache a img # Retorna None caso não ache a img def find_img(img, pasta='imgs', conf=1): try: path = os.path.join(pasta, img) if conf != 1: return a.locateOnScreen(path, confidence=conf) else: return a.locateOnScreen(path) except: return False _find_img = find_img # Espera pela imagem 'img' que atenda ao nível de correspondência 'conf' # Até que o 'timeout' seja excedido ou indefinidamente para 'timeout' negativo # Retorna uma tupla com os valores (x, y, altura, largura) caso ache a img # Retorna None caso não ache a imagem ou exceda o 'timeout' def wait_img(img, pasta='imgs', conf=1.0, delay=1, timeout=20, debug=False): if debug: print('\tEsperando', img) aux = 0 while True: box = find_img(img, pasta, conf=conf) if box: return box sleep(delay) if timeout < 0: continue if timeout == aux: break aux += 1 return None _wait_img = wait_img # Procura e clica 'clicks' vezes com o botão 'button' na imagem 'img' # que atenda ao nível de correspondência conf # Retorna True caso ache a img # Retorna False caso não ache a imagem ou exceda o 'timeout' def click_img(img, pasta='imgs', conf=1.0, delay=1, timeout=20, button='left', clicks=1): img = os.path.join(pasta, img) try: for i in range(timeout): box = a.locateCenterOnScreen(img, confidence=conf) if box: a.click(a.locateCenterOnScreen(img, confidence=conf), button=button, clicks=clicks) return True sleep(delay) else: return False except: return False _click_img = click_img def click_position_img(img, operacao, pixels_x=0, pixels_y=0, pasta='imgs', conf=1.0, clicks=1): try: if img.endswith('.png'): img = os.path.join(pasta, img) a.moveTo(a.locateCenterOnScreen(img, confidence=conf)) local_mouse = a.position() else: local_mouse = img if operacao == '+': a.click(int(local_mouse[0] + int(pixels_x)), int(local_mouse[1] + int(pixels_y)), clicks=clicks) return True if operacao == '-': a.click(int(local_mouse[0] - int(pixels_x)), int(local_mouse[1] - int(pixels_y)), clicks=clicks) return True if operacao == '+x-y': a.click(int(local_mouse[0] + int(pixels_x)), int(local_mouse[1] - int(pixels_y)), clicks=clicks) return True if operacao == '-x+y': a.click(int(local_mouse[0] - int(pixels_x)), int(local_mouse[1] + int(pixels_y)), clicks=clicks) return True except: return False _click_position_img = click_position_img
  9. Olá, eu trabalho fazendo automação em python RPA em um escritorio de contabilidade, utilizo pyautogui, selenium e request, se voce explicar melhor com imagens exemplos, links , e etc posso te ajudar.!
  10. Voce pode utilizar o Pycharm, usando Python,HTML, CSS, JS porem tem que usar a biblioteca Eel do python
  11. @Alexander_Piazzi defina somalinhas = [ ] antes do seu for.
  12. Olá @Marino Filho Aqui está algumas sugestões que pode estar ocasionando o erro; Virtual keyboard not allowed (Teclado virtual não permitido): indica que o uso de teclados virtuais (aqueles que aparecem na tela do dispositivo) está desabilitado ou proibido. Isso pode ser relevante em contextos onde se deseja aumentar a segurança ou em situações onde teclados físicos são preferidos para entrada de dados. Single mode (Modo único): pode se referir a um estado operacional onde o dispositivo ou aplicativo está limitado a executar uma única tarefa ou aplicativo por vez, talvez para melhorar o desempenho ou a segurança. Not docked (Não acoplado): sugere que o dispositivo não está conectado a um dock ou estação de acoplamento, que poderia ser usado para conectar dispositivos periféricos, como teclados físicos, monitores externos, etc.
  13. Olá @Alexandre.MaxterTechvocê pode enviar o seu código fonte para entender melhor oque deseja.
  14. Se você está utilizando o pandas para trabalhar com arquivos Excel em Python, pode ser que esteja lidando com dois objetos principais: pd.ExcelFile para ler os arquivos e DataFrame.to_excel para escrever DataFrames em arquivos Excel. Quando você lê um arquivo Excel com pd.ExcelFile, você obtém um objeto que permite acessar as várias abas (sheets) do arquivo Excel, mas esse objeto em si não contém um atributo direto para obter o nome do arquivo original. Contudo, você pode manter o nome do arquivo em uma variável quando carrega o arquivo e reutilizá-lo conforme necessário. Aqui está um exemplo de como fazer isso: import pandas as pd # Carregar o arquivo Excel e manter o nome do arquivo nome_do_arquivo = 'caminho_para_seu_arquivo.xlsx' excel_file = pd.ExcelFile(nome_do_arquivo) # Agora você pode usar 'excel_file' para trabalhar com o arquivo # Por exemplo, para ler a primeira aba (sheet) do Excel: df = excel_file.parse(excel_file.sheet_names[0]) # Aqui você faz suas operações com o DataFrame 'df' # Quando for salvar o resultado em um novo arquivo Excel, você pode usar o nome que guardou df_resultado.to_excel(f"resultado_{nome_do_arquivo}") Neste exemplo, nome_do_arquivo é uma variável que guarda o caminho para o seu arquivo Excel. Ao salvar o DataFrame df_resultado em um novo arquivo Excel, você pode formatar o nome do arquivo de saída como desejar, aqui usei f"resultado_{nome_do_arquivo}" para prefixar o nome do arquivo original com "resultado_", mas você pode ajustar isso conforme a sua necessidade. Note que se o seu objetivo for apenas obter o nome do arquivo sem o caminho completo ou a extensão, você pode usar métodos do módulo os para manipular strings de caminho de arquivo: import os # Extrair apenas o nome do arquivo, sem o caminho e a extensão nome_base = os.path.splitext(os.path.basename(nome_do_arquivo))[0] # Usar o nome_base para nomear o novo arquivo Excel df_resultado.to_excel(f"{nome_base}_resultado.xlsx") Este pedaço de código extraí o nome do arquivo sem o caminho completo e a extensão, permitindo que você use este nome base para nomear seu arquivo de saída como preferir.
×
×
  • Create New...