【问题标题】:Python | Selenium | Keeps outputting page source rather than what I see when I manually inspect element蟒蛇 |硒 |继续输出页面源而不是我手动检查元素时看到的
【发布时间】:2020-01-07 20:33:20
【问题描述】:

我希望打印出手动检查页面时看到的内容。但是,它似乎正在打印页面源,因为我在手动检查时找不到那里的元素。

我正在尝试获取美国银行信用卡的产品名称。

我使用 Selenium 是因为 bankofamerica 网站上的产品名称是通过 Javascript 生成的。一旦我知道我正在解析正确的元素,我计划通过搜索类来找到卡片名称和其他相关元素。

我相信我已经正确安装了 Firefox 网络驱动程序,因为代码打开了一个浏览器窗口,指向正确的页面。

import requests
from bs4 import BeautifulSoup
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('https://www.bankofamerica.com/credit-cards/#filter')
html = browser.execute_script("return document.documentElement.outerHTML")

sel_soup = BeautifulSoup(html,'html.parser')
print (sel_soup)

【问题讨论】:

  • 您没有使用所需的 xpath 过滤已解析的 html,这就是它显示整个 html 的原因。
  • @supputuri 非常感谢您的帮助。如果我仍然遗漏了什么,我深表歉意,但在这个阶段,我希望它能够输出整个 html。但是,如果我手动检查页面,它不会输出与我看到的相同的 html,而是输出页面的静态源(不是 Javascript 输出的动态元素)。这有助于澄清吗?
  • 您的意思是在滚动页面时将加载的元数据或动态数据?我建议在你的情况下使用 selenium 来获得你想要的结果,因为有一个 js 正在加载数据,而 BS 将获得没有 js 数据的 html。
  • 滚动页面时加载的动态数据。具体来说,如果我手动检查页面,我可以找到 class="small-12 medium-9 columns" 包含我需要的信息,但是当我运行我在 'class="small-12 medium-9 上面发布的代码时columns" ' 不会出现在任何地方。谢谢 :) 啊,我刚刚阅读了您的第二部分,我将努力用与硒相关的其他东西替换 BeautifulSoup。只需要弄清楚应该是什么...... :)
  • 刚刚发布了伪代码,应该会给你一个好的开始。

标签: python selenium-webdriver xpath beautifulsoup


【解决方案1】:

使用 selenium 试试下面的代码。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Firefox()
browser.get('https://www.bankofamerica.com/credit-cards/#filter')
# wait until the `.small-12.medium-9.columns` class elements present
WebDriverWait(browser,5).until(EC.presence_of_element_located((By.CSS_SELECTOR,'.small-12.medium-9.columns')))
# get all the elements with matching class
creditCardOptions = browser.find_elements_by_css_selector('.small-12.medium-9.columns')
# now you can have your own logic to iterate through all the CC options.

【讨论】:

    最近更新 更多