来自selenium的不完整html

5jvtdoz2  于 2021-08-25  发布在  Java
关注(0)|答案(4)|浏览(537)

嗨,我想知道为什么我有一个特定页面的url并使用selenium,如下所示:

  1. webdriver.get(url)
  2. webdriver.page_source

selenium提供的源代码缺少从浏览器检查页面时存在的元素?
这是网站保护自己免受刮擦的某种方式吗?

2exbekwf

2exbekwf1#

尝试在两个时间段之间添加一些延迟 webdriver.get(url)webdriver.page_source 让页面完全加载

knsnq2tg

knsnq2tg2#

通常,它应该为您提供包含所有标记和标记属性的整个页面源内容。但这只是 applicable for static web pages .
对于动态网页, webdriver.page_source 将只为您提供dom中此时可用的页面资源。原因dom将根据用户与页面的交互进行更新。
请注意,iFrame被排除在 page_source 无论如何。

ogsagwnx

ogsagwnx3#

如果您正在抓取的站点是一个动态网站,那么加载javascript需要一些时间,执行一些dom操作等等,只有在这之后,您才能获得页面的源代码。
因此,最好在两次访问之间添加一些时间延迟 get 请求并获取页面源。

  1. import time
  2. webdriver.get(url)
  3. # pauses execution for x seconds.
  4. time.sleep(x)
  5. webdriver.page_source
p1iqtdky

p1iqtdky4#

页面源代码可能包含javascript文件上的一个链接,您将在页面上看到通过运行js代码在浏览器中生成的许多控件。
源页面为:

  1. <script>
  2. [1,2,3,4,5].map(i => document.write(`<p id="${i}">${i}</p>`))
  3. </script>

虚拟dom是:

  1. <p id="1">1</p>
  2. <p id="2">2</p>
  3. <p id="3">3</p>
  4. <p id="4">4</p>
  5. <p id="5">5</p>

要获取虚拟dom html,请执行以下操作:

  1. document.querySelector('html').innerHTML
  1. <script>
  2. [1,2,3,4,5].map(i => document.write(`<p id="${i}">${i}</p>`))
  3. console.log(document.querySelector('body').innerHTML)
  4. </script>
展开查看全部

相关问题