首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium:浏览器显示与HTML代码不同

问Selenium:浏览器显示与HTML代码不同
EN

Stack Overflow用户
提问于 2013-10-16 08:19:52
回答 1查看 3.6K关注 0票数 1

我想使用Python使用Selenium登录到这个页面。但是浏览器中显示的页面与HTML.Firefox或Chrome中描述的页面不同,结果是相同的。

代码语言:javascript
复制
chromedriver = "./chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)

# OR
#driver = webdriver.Firefox() 


driver.get('http://www.anb.org/login.htmlurl=%2Farticles%2Fhome.html&ip=94.112.189.79&nocookie=0')
# get screenshot of page
driver.get_screenshot_as_file('./01.png')

#get source code of page
print driver.page_source

我不允许张贴图片,但图像与网页浏览器中显示的页面完全相同。

驱动程序的HTML代码:

代码语言:javascript
复制
<html><head>
<title>American National Biography Online</title>
<script>
document.write ("<FRAMESET ROWS=\"103,*\" FRAMEBORDER=0 BORDER=0 FRAMESPACING=0>\n");
document.write ("  <FRAME SRC=\"top-home.html\" MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO>\n");
if (location.search) {
  var url = unescape (location.search);
  url = (new String(url)).substring(1);
  if (url.indexOf ("&") == -1) {
    document.write ("  <FRAME SRC=\"" + url + "\" MARGINWIDTH=0 MARGINHEIGHT=0>\n");
  } else {
    document.write ("  <FRAME SRC=\"main-home.html" + location.search + "\" MARGINWIDTH=0 MARGINHEIGHT=0>\n");
  }
}
else
  document.write ("  <FRAME SRC=\"main-home.html\" NAME=atop MARGINWIDTH=0 MARGINHEIGHT=0>\n");
document.write ("</FRAMESET>\n");
</script></head>
<frameset rows="103,*" frameborder="0" border="0" framespacing="0">
  <frame src="top-home.html" marginwidth="0" marginheight="0" scrolling="NO">
  <frame src="main-home.html?url=%2Farticles%2Fbrowse.html&amp;ip=94.112.189.79&amp;nocookie=0" marginwidth="0" marginheight="0">
</frameset>

<noframes>
</noframes> 
</html>

如您所见,HTML和图片不匹配。

也许是框架的问题?

我的配置:

代码语言:javascript
复制
osx 10.8.5
python 2.7.5
chrome browser 28.0.1500.71
firefox browser 24.0

我安装了最新的chrome/firefox网络驱动程序,但我真的不知道如何找到版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-16 08:57:04

属性page_source几乎毫无用处:它返回服务器发送给浏览器的HTML的第一个版本;它是而不是,是当前DOM的副本。

获得副本的最佳方法是使用JavaScript和innerHTML

代码语言:javascript
复制
js_code = "return document.getElementsByTagName('html').innerHTML"
your_elements = sel.execute_script(js_code)

还请注意,innerHTML不跨frame元素。由于代码中有框架,因此需要单独检查这些框架:

代码语言:javascript
复制
frames = driver.find_element_by_tag_name("frame")
js_code = "return arguments[0].innerHTML"
your_elements = sel.execute_script(js_code, frames[0])

您还可以切换到一个框架:

代码语言:javascript
复制
driver.switch_to_frame("frameName")

在此之后,所有代码都将在此框架的上下文中执行。别忘了换回去。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19398385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档