python下载整个网站_python – Selenium下载整个HTML

我一直在尝试使用硒来刮擦整个网页.我希望它们中至少有一小部分是水疗中心,如Angular,React,Vue,所以这就是我使用Selenium的原因.

我需要下载整个页面(如果某些内容没有从延迟加载加载,因为没有向下滚动,这很好).我试过设置time.sleep()延迟,但是没有用.在我得到页面之后,我希望将其哈希并将其存储在数据库中以便稍后进行比较,并检查内容是否已更改.目前,散列每次都不同,这是因为每次缺少不同的部分数量时,selenium不会下载整个页面.我已经在几个网页上证实了这一点,而不仅仅是一个单一的网页.

我也可能有1000个网页通过手工获取所有链接所以我没有时间在它们上找到一个元素以确保它被加载.

这个过程需要多长时间并不重要.如果需要1个小时,那么速度并不重要,只有准确性.

如果您有其他想法,请分享.

我的司机声明

from selenium import webdriver

from selenium.common.exceptions import WebDriverException

driverPath = '/usr/lib/chromium-browser/chromedriver'

def create_web_driver():

options = webdriver.ChromeOptions()

options.add_argument('headless')

# set the window size

options.add_argument('window-size=1200x600')

# try to initalize the driver

try:

driver = webdriver.Chrome(executable_path=driverPath, chrome_options=options)

except WebDriverException:

print("failed to start driver at path: " + driverPath)

return driver

我的网址叫我超时= 20

driver.get(url)

time.sleep(timeout)

content = driver.page_source

content = content.encode('utf-8')

hashed_content = hashlib.sha512(content).hexdigest()

^每次得到不同的哈希,因为相同的网址不生成相同的网页

最佳答案 由于受测试的应用程序(AUT)基于Angular,React,Vue,在这种情况下Selenium似乎是完美的选择.

现在,因为你没有从延迟加载加载某些内容这一事实,因为没有滚动使得用例可行.但是在所有可能的方面……没有时间在它们上面找到一个元素以确保它被加载…无法真正补偿导致time.sleep(),因为time.sleep()有一定的缺点.您可以在How to sleep webdriver in python for milliseconds中找到详细的讨论.值得一提的是,对于所有1000多个网页,HTML DOM的状态将有所不同.

一些可行的解决方案:

>页面标题

>页面标题

>另一个解决方案是调整功能pageLoadStrategy.您可以将所有1000个奇数网页的pageLoadStrategy设置为公共点,分配值:

>正常(整页加载)

>渴望(互动)

>没有

如果你实现了pageLoadStrategy,那么page_source方法将在同一个跳转点被触发,你可能会看到相同的hashed_content.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值