使用 BeautifulSoup Python 单击按钮后获取价值

Posted

技术标签:

【中文标题】使用 BeautifulSoup Python 单击按钮后获取价值【英文标题】:Getting value after button click with BeautifulSoup Python 【发布时间】:2019-05-27 03:47:45 【问题描述】:

我试图在单击按钮后获取网站给出的值。

这里是网站: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()

【问题讨论】:

【参考方案1】:

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

【讨论】:

你是对的,它们没有关系。但我在这里尝试了你的代码,但仍然是空值 @Felipe ,您是尝试初始答案还是最后更新?还是没有输出?我尝试了几次并获得了所需的输出...... 我尝试了最后一次更新,这里是输出:跨度> @Felipe ,嗯...我的代码绝对不能返回div node...我认为您使用不正确。只需print(open_browser()) 即可获得价值 @Felipe ,我不使用 Scrapy,所以无法为您提供合适的代码。检查更新的答案【参考方案2】:

您不需要使用 requests 和 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()

【讨论】:

【参考方案3】:

你能在文本改变之前使用 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())

【讨论】:

【参考方案4】:

我推荐这个做同样事情的网站。

https://4devs.net.br/gerador-cpf

但是要使用 selenium 获得“gerar cpf”操作,您可以使用浏览器检查 HTML 源代码,然后单击“复制此元素的 XPath”。

这比手动搜索页面中的元素要简单得多。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 BeautifulSoup Python 单击按钮后获取价值的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫:想听榜单歌曲?只需要14行代码即可搞定

Python3 爬虫 -- BeautifulSoup之再次爬取CSDN博文

[Python]BeautifulSoup安装与使用

Python爬虫之Beautifulsoup模块的使用

Python BeautifulSoup库使用

python爬虫之beautifulsoup的使用