以20秒的时间间隔比较old_page_source和new_page_source对我来说是不成功的。
# using google chrome as my browser
driver = webdriver.Chrome('chromedriverfilepath')
# 5 trials to see how often page gets updated. Currently unsuccesful
for x in range(1, 5):
# the webpage being analyzed
driver.get("www.somewebsite.com")
old_page_source = driver.page_source
print time.strftime("\n\nTRIAL %d" % x + " ,first page fetched at time...." + 'Time: %H:%M:%S')
driver.get("www.somewebsite.com")
new_page_source = driver.page_source
# keep checking every 20 seconds until page is updated/changed
while old_page_source == new_page_source:
sleep(20)
driver.get("www.somewebsite.com")
new_page_source = driver.page_source
print "page was changed at time.... " + time.strftime('Time: %H:%M:%S')
答案 0 :(得分:1)
你不能依靠page_source
来做你正在做的事情。 Selenium将报告的内容最有可能是浏览器首次收到的内容。作为文档mention:
获取上次加载的页面的来源。 如果页面在加载后已被修改(例如,通过Javascript),则无法保证返回的文本是已修改页面的文本。请参阅用于确定是否使用的特定驱动程序的文档返回的文本反映了Web服务器最后发送的页面或文本的当前状态。返回的页面源是底层DOM的表示:不要期望它以与从Web服务器发送的响应相同的方式进行格式化或转义。把它想象成艺术家的印象。
(强调我的。文档是针对Java绑定的,但行为不是由Java绑定决定的,而是由浏览器端的Selenium部分决定的。所以这也适用于Python绑定。)
为了获得页面的实际状态,您应该做些什么:
driver.execute_script("return document.documentElement.outerHTML")
这将为您提供整个页面的DOM树的序列化。
答案 1 :(得分:0)
如果您只想比较文本差异,可以从body标签中获取文本。由于源页面每次加载时都可能会更改,因此永远不会进入while循环。 (例如基于会话的信息)
body = driver.find_element_by_tag_name("body")
original = body.text
newer = original
while original == newer:
driver.get("www.somewebsite.com")
body = driver.find_element_by_tag_name("body")
newer = body.text
time.sleep(20)