如何在 Selenium 中获取当前页面的 Web 加载 HTML?

Posted

技术标签:

【中文标题】如何在 Selenium 中获取当前页面的 Web 加载 HTML?【英文标题】:How Can I Get The Web-Loaded HTML of The Current Page in Selenium? 【发布时间】:2022-01-10 08:27:48 【问题描述】:

我有一个页面,我必须登录才能获取我想使用 BeautifulSoup 抓取的页面。我的代码目前看起来像

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox();
//loginpage is the page where I have to login. It is just used as a placeholder for this question
driver.get("loginpage");
driver.find_element_by_id("username").send_keys("username");
driver.find_element_by_id("password").send_keys("password");
driver.find_element_by_xpath("//button[@onclick=\"return validateFields();\"]").click();
//contentpage is where I get the content to scrape from. It is also just used as a placeholder for this question.
driver.get("contentpage");
html = driver.page_source;
soup = BeautifulSoup(html, features="lxml");
status = soup.find_all("span");
for status in status:
    print(status);

但我认为 HTML 是错误的页面,因为当我可以查看浏览器并看到它应该存在时,BeautifulSoup 正在返回 NoneType。

【问题讨论】:

【参考方案1】:

一旦您调用 get() 并且在提取 page_source 之前,您需要为任何 可见 元素,您可以使用以下Locator Strategy:

driver.get("contentpage")
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "css_of_a-visible_element")))
html = driver.page_source

作为替代方案,您也可以使用 document.documentElement.outerHTML,如下所示:

driver.get("contentpage")
WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "css_of_a-visible_element")))
html = driver.execute_script("return document.documentElement.outerHTML")

参考文献

您可以在以下位置找到一些相关的详细讨论:

How to retrieve html source from the web application WindGuru How to get the html in selenium of current page

【讨论】:

以上是关于如何在 Selenium 中获取当前页面的 Web 加载 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 selenium 获取当前网页

Selenium获取当前窗口句柄与切换回原窗口句柄

Python+Selenium浏览器后退前进操作+获取当前页面title+获取当前页面url

Splinter 或 Selenium:我们可以在单击按钮后获取当前的 html 页面吗?

使用 Selenium WebDriver 获取当前页面的 URL

如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?