Получение значения после нажатия кнопки с BeautifulSoup Python - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь получить значение, которое дает веб-сайт после нажатия кнопки.

Вот веб-сайт: https://www.4devs.com.br/gerador_de_cpf

Вы можете видеть, что естькнопка под названием «Gerar CPF», эта кнопка предоставляет число, которое появляется после щелчка.

Мой текущий скрипт открывает браузер и получает значение, но я получаю значение со страницы до нажатия кнопки,поэтому значение пусто.Я хотел бы знать, возможно ли получить значение после нажатия на кнопку.

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

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Можно ли использовать цикл "Пока", пока текст не изменится?

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())
0 голосов
/ 30 декабря 2018

Вам не нужно использовать запросы и 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 голосов
/ 30 декабря 2018

open_browser и get_cpf абсолютно не связаны друг с другом ...

На самом деле get_cpf вообще не требуется.Просто дождитесь текста после нажатия кнопки:

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

Обновление

То же самое с запросами:

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