7

Web サイト " http://everydayhealth.com "をクロールしようとしています。ただし、ページが動的にレンダリングされることがわかりました。それで、「もっと見る」ボタンをクリックすると、いくつかの新しいニュースが表示されます。ただし、スプリンターを使用してボタンをクリックしても、「browser.html」が現在の html コンテンツに自動的に変更されません。Splinter または Selenium を使用して、最新の HTML ソースを取得する方法はありますか? スプリンターの私のコードは次のとおりです。

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

ただし、出力テキストでは、更新されたページのテキストがまだ見つかりませんでした。たとえば、"Is Milk Your Friend or Foe?" を検索しても何も返されません。どうしたの?

4

2 に答える 2

3

driverSelenium では、それが初期化されたオブジェクトであると仮定するWebDriverと、呼び出し時の DOM の状態に対応する HTML が得られます。

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

戻り値は文字列なので、次のことができます。

print(driver.execute_script("return document.documentElement.outerHTML;"))
于 2014-11-08T17:24:54.677 に答える