嗨,我想知道为什么我有一个特定页面的url并使用selenium,如下所示:
webdriver.get(url) webdriver.page_source
selenium提供的源代码缺少从浏览器检查页面时存在的元素?这是网站保护自己免受刮擦的某种方式吗?
2exbekwf1#
尝试在两个时间段之间添加一些延迟 webdriver.get(url) 及 webdriver.page_source 让页面完全加载
webdriver.get(url)
webdriver.page_source
knsnq2tg2#
通常,它应该为您提供包含所有标记和标记属性的整个页面源内容。但这只是 applicable for static web pages .对于动态网页, webdriver.page_source 将只为您提供dom中此时可用的页面资源。原因dom将根据用户与页面的交互进行更新。请注意,iFrame被排除在 page_source 无论如何。
applicable for static web pages
page_source
ogsagwnx3#
如果您正在抓取的站点是一个动态网站,那么加载javascript需要一些时间,执行一些dom操作等等,只有在这之后,您才能获得页面的源代码。因此,最好在两次访问之间添加一些时间延迟 get 请求并获取页面源。
get
import time webdriver.get(url) # pauses execution for x seconds. time.sleep(x) webdriver.page_source
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>
4条答案
按热度按时间2exbekwf1#
尝试在两个时间段之间添加一些延迟
webdriver.get(url)
及webdriver.page_source
让页面完全加载knsnq2tg2#
通常,它应该为您提供包含所有标记和标记属性的整个页面源内容。但这只是
applicable for static web pages
.对于动态网页,
webdriver.page_source
将只为您提供dom中此时可用的页面资源。原因dom将根据用户与页面的交互进行更新。请注意,iFrame被排除在
page_source
无论如何。ogsagwnx3#
如果您正在抓取的站点是一个动态网站,那么加载javascript需要一些时间,执行一些dom操作等等,只有在这之后,您才能获得页面的源代码。
因此,最好在两次访问之间添加一些时间延迟
get
请求并获取页面源。p1iqtdky4#
页面源代码可能包含javascript文件上的一个链接,您将在页面上看到通过运行js代码在浏览器中生成的许多控件。
源页面为:
虚拟dom是:
要获取虚拟dom html,请执行以下操作: