我试图加载一个网页。然后滚动到此页面的最底部(有一个无限滚动)并获取页面源代码。
滚动和加载似乎工作正常,但driver.page_source
返回非常短的html
,这只是整个page source
的一小部分。
def scroll_to_the_bottom(driver):
old_html = ''
new_html = driver.page_source
while old_html != new_html:
print 'SCROLL'
old_html = driver.page_source
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
new_html = driver.page_source
driver.get("http://www.citypaper.com/music/short-list/bcpnews-the-short-list-weird-al-the-heartless-bastards-chastity-belt-more-20150609-story.html")
scroll_to_the_bottom(driver)
print driver.page_source
CONSOLE:
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" data-role="base navhead resizescroll imgsize metrics oopadloader socialshare panelmod transporter"><head><script type="text/javascript" async="" src="//ml314.com/tag.aspx?2972015"></script><script type="text/javascript" async="" src="//ml314.com/tag.aspx?2972015"></script><script async="" src="http://b.scorecardresearch.com/beacon.js"></script><script async="" src="//www.google-analytics.com/analytics.js"></script><script type="text/javascript" src="http://beacon.krxd.net/optout_check?callback=Krux.ns._default.kxjsonp_optOutCheck"></script><script charset="UTF-8" type="text/javascript" src="http://cdn.taboola.com/libtrc/impl.174-RELEASE.js"></script><script async="" src="//widget.perfectmarket.com/tribunedigital-network/load.js"></script><script async="" src="http://b.scorecardresearch.com/beacon.js"></script>
<title>Music Boxes - Baltimore City Paper</title>
<link rel="dns-prefetch" href="//www.trbimg.com" /><link rel="dns-prefetch" href="//static.chartbeat.com" /><link rel="dns-prefetch" href="//loggingservices.tribune.com" /><link rel="dns-prefetch" href="//m.trb.com" /><link rel="dns-prefetch" href="//b.scorecardresearch.com" /><link rel="dns-prefetch" href="//www.google-analytics.com" /><link rel="dns-prefetch" href="http://pubads.g.doubleclick.net" /><link rel="dns-prefetch" href="https://securepubads.g.doubleclick.net" /><link rel="dns-prefetch" href="//secure-us.imrworldwide.com" /><link rel="dns-prefetch" href="//www.googletagservices.com" /><link rel="dns-prefetch" href="http://ssor.tribdss.com" /><link rel="dns-prefetch" href="//cdn.krxd.net" /><link rel="dns-prefetch" href="//cdn.gigya.com" /><link rel="dns-prefetch" href="//cdn.taboola.com" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<meta charset="utf-8" />
<meta name="x-servername" content="i10latisrapp02" />
<meta name="robots" content="noodp, noydir" />
我使用chromedriver
所以我可以清楚地看到它滚动到底部。问题可能在哪里?
编辑:
我已经添加了一个网页。
答案 0 :(得分:0)
您不能依赖page_source
来获取页面的当前状态。 Python文档没有指出它,但是如果你看一下getPageSource
的Selenium的Java文档,你会看到:
如果页面在加载后已被修改(例如,通过Javascript),则无法保证返回的文本是已修改页面的文本。
您可以要求浏览器序列化DOM。这将生成代表调用时DOM的HTML:
driver.execute_script("return document.documentElement.outerHTML")
答案 1 :(得分:0)
您是否知道在向下滚动时页面内容会加载/卸载?当您向下滚动时,页面将卸载前面的部分。例如,一直向下滚动到页面底部并开始向上滚动。您将看到它正在加载前一部分。
为了证明这一点......当你第一次加载页面时,第一篇文章标题是,&#34;短名单:怪异的Al,无情的混蛋,贞操带,更多&#34;。滚动到页面底部,拉动HTML源(手动),然后搜索该标题。它不存在。
所以,我不知道你要做什么,但如果你想要做的只是加载最后一部分,你可以使用URL http://www.citypaper.com/music/music-boxes/ 直接导航到最后一部分p>
不同的部分是:
主要文章
http://www.citypaper.com/music/music-features/
http://www.citypaper.com/music/listening-party/
http://www.citypaper.com/music/music-boxes/
为什么你还想要页面的HTML源代码?你想达到什么目的?使用Selenium的一个要点是,您可以使用定位器查找HTML标记,这样您就不必解析源等。
答案 2 :(得分:0)
我有类似的问题。我在get.page_source之后使用time.sleep(5),以便可以读取内容。