来自selenium的不完整html

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

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

webdriver.get(url)
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 请求并获取页面源。

import time

webdriver.get(url)

# pauses execution for x seconds.

time.sleep(x)

webdriver.page_source
p1iqtdky

p1iqtdky4#

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

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

虚拟dom是:

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

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

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

相关问题