web-dev-qa-db-fra.com

Obtenir de la valeur après un clic sur le bouton avec BeautifulSoup Python

J'essaie d'obtenir une valeur donnée par le site Web après un clic sur un bouton.

Voici le site Web: https://www.4devs.com.br/gerador_de_cpf

Vous pouvez voir qu'il existe un bouton appelé "Gerar CPF", ce bouton fournit un nombre qui apparaît après le clic.

Mon script actuel ouvre le navigateur et obtient la valeur, mais je reçois la valeur de la page avant le clic, donc la valeur est vide. Je voudrais savoir s'il est possible d'obtenir la valeur après avoir cliqué sur le bouton.

from Selenium import webdriver
from bs4 import BeautifulSoup
from requests import get

url = "https://www.4devs.com.br/gerador_de_cpf"

def open_browser():
    driver = webdriver.Chrome("/home/felipe/Downloads/chromedriver")
    driver.get(url)
    driver.find_element_by_id('bt_gerar_cpf').click()

def get_cpf():
    response = get(url)

    page_with_cpf = BeautifulSoup(response.text, 'html.parser')

    cpf = page_with_cpf.find("div", {"id": "texto_cpf"}).text

    print("The value is: " + cpf)


open_browser()
get_cpf()
8
Rick Sanchez

open_browser et get_cpf ne sont absolument pas liés les uns aux autres ...

En fait, vous n'avez pas besoin de get_cpf du tout. Attendez simplement le texte après avoir cliqué sur le bouton:

from Selenium.webdriver.support.ui import WebDriverWait as wait

def open_browser():
    driver = webdriver.Chrome("/home/felipe/Downloads/chromedriver")
    driver.get(url)
    driver.find_element_by_id('bt_gerar_cpf').click()
    text_field = driver.find_element_by_id('texto_cpf')
    text = wait(driver, 10).until(lambda driver: not text_field.text == 'Gerando...' and text_field.text)
    return text

print(open_browser())

Mise à jour

La même chose avec les demandes:

import requests

url = 'https://www.4devs.com.br/ferramentas_online.php'
data = {'acao': 'gerar_cpf', 'pontuacao': 'S'}
response = requests.post(url, data=data)
print(response.text)
5
Andersson

Pouvez-vous utiliser une boucle While jusqu'à ce que le texte change?

from Selenium import webdriver

url = "https://www.4devs.com.br/gerador_de_cpf"

def get_value():
    driver = webdriver.Chrome()
    driver.get(url)
    driver.find_element_by_id('bt_gerar_cpf').click()
    while driver.find_element_by_id('texto_cpf').text == 'Gerando...':
        continue
    val = driver.find_element_by_id('texto_cpf').text
    driver.quit()
    return val

print(get_value())
2
QHarr

Vous n'avez pas besoin d'utiliser les demandes et BeautifulSoup.

from Selenium import webdriver
from time import sleep

url = "https://www.4devs.com.br/gerador_de_cpf"

def get_cpf():
    driver = webdriver.Chrome("/home/felipe/Downloads/chromedriver")
    driver.get(url)
    driver.find_element_by_id('bt_gerar_cpf').click()
    sleep(10)
    text=driver.find_element_by_id('texto_cpf').text
    print(text)
get_cpf()
0
Bitto Bennichan