使用 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_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)
【讨论】:
你是对的,它们没有关系。但我在这里尝试了你的代码,但仍然是空值 @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 单击按钮后获取价值的主要内容,如果未能解决你的问题,请参考以下文章