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

时间:2014-11-07 20:57:22

标签: python html selenium web-crawler splinter

我试图抓取网站" http://everydayhealth.com"。但是,我发现该页面将动态呈现。因此,当我点击按钮"更多"时,会显示一些新消息。但是,使用splinter单击按钮不会让#34; browser.html"自动更改为当前的html内容。有没有办法让它获得最新的html源,使用splinter或selenium?我在splinter中的代码如下:

import requests
from bs4 import BeautifulSoup
from splinter import Browser

browser = Browser()
browser.visit('http://everydayhealth.com')
browser.click_link_by_text("More")

print(browser.html)

根据@Louis的回答,我重新编写了如下程序:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox()
driver.get("http://www.everydayhealth.com")
more_xpath = '//a[@class="btn-more"]'
more_btn = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(more_xpath))
more_btn.click()
more_news_xpath = '(//a[@href="http://www.everydayhealth.com/recipe-rehab/5-herbs-and-spices-to-intensify-flavor.aspx"])[2]'
WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(more_news_xpath))

print(driver.execute_script("return document.documentElement.outerHTML;"))
driver.quit()

但是,在输出文本中,我仍然无法在更新的页面中找到该文本。例如,当我搜索"牛奶是你的朋友还是敌人?"时,它仍然没有返回任何东西。问题是什么?

2 个答案:

答案 0 :(得分:3)

使用Selenium,假设driver是您初始化的WebDriver对象,这将为您提供与您拨打电话时DOM状态相对应的HTML:

driver.execute_script("return document.documentElement.outerHTML;")

返回值是一个字符串,您可以这样做:

print(driver.execute_script("return document.documentElement.outerHTML;"))

答案 1 :(得分:-1)

当我将Selenium用于此类任务时,我知道browser.page_source确实会更新。