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()
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)
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())
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()