web-dev-qa-db-ja.com

BeautifulSoupでボタンをクリックした後の値の取得Python

ボタンをクリックした後、ウェブサイトから与えられる値を取得しようとしています。

こちらがウェブサイトです: 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()
8
Rick Sanchez

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)
5
Andersson

テキストが変更されるまでWhileループを使用できますか?

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

リクエストや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