- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在尝试使用 Selenium 来抓取整个网页。我预计其中至少有一小部分是 spa,例如 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
我的 url 调用 我的超时 = 20
driver.get(url)
time.sleep(timeout)
content = driver.page_source
content = content.encode('utf-8')
hashed_content = hashlib.sha512(content).hexdigest()
^ 每次都在这里得到不同的哈希值,因为相同的 url 不会产生相同的网页
最佳答案
由于被测应用程序 (AUT) 基于 Angular、React、Vue 在这种情况下Selenium 似乎是完美的选择。
现在,由于您对 某些内容由于不滚动而未从延迟加载中加载
的事实感到满意,因此 用例可行的。但是在所有可能的方式中 ...没有时间在它们上面找到一个元素以确保它被加载...
不能真正补偿诱导 time.sleep()
因为 time.sleep()
有一些缺点。您可以在 How to sleep webdriver in python for milliseconds 中找到详细的讨论。 .值得一提的是 HTML DOM 的状态所有 1000 个奇数网页都会不同。
几个可行的解决方案:
一个潜在的解决方案可能是引发 WebDriverWait 并确保根据讨论加载一些 HTML 元素 How can I make sure if some HTML elements are loaded for Selenium + Python?至少验证以下任何一项:
另一种解决方案是调整功能 pageLoadStrategy。您可以将所有 1000 个奇数网页的 pageLoadStrategy 设置为公共(public)点并分配一个值:
正常
(整页加载)eager
(交互式)无
您可以在 How to make Selenium not wait till full page load, which has a slow script? 中找到详细的讨论。
如果您实现 pageLoadStrategy,page_source
方法将在相同的触发点触发,您可能会看到相同的 hashed_content。
关于python - Selenium 下载整个 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696433/
当我尝试通过我的 .exe 文件从 url 下载 .pdf 文件时出现以下错误。 The server committed a protocol violation. Section=Response
我是一家非营利组织的 G Suite 管理员,刚刚发现数据导出功能,这似乎是个人帐户的外卖。 导出文件已准备好,现在可以从 Google Cloud Platform Storage 中的存储桶下载。
导航 引言 总体思路 七牛云相关的配置文件 获取七牛云上传token 相关类定义 核心代码实现 获取七牛云图片下载链接 公开空
这不是后端编程问题。我只能修改标记或脚本(或文档本身)。我在这里问的原因是因为我对适当术语的所有搜索都不可避免地导致有关编程此功能的问题和解决方案。我不是试图通过编程来强制它;我必须找出此 PDF 行
您好,我已在 Google AdSense 中注册,我想使用适用于 iOS 的 SDK,但目前我找不到 SDK 下载链接。 我的申请已获批准。 任何人都知道如何下载这个sdk。 我使用这个链接来描述如
我需要为当前在 SourceForge 上的 github 项目提供二进制文件和文档。在那里,我可以为我需要的下载提供一个目录结构,因为我必须为大约 10 个不同的操作系统提供几个版本。 github
我从 Canvas 下载绘图时遇到问题。这是我的代码: function downloadCanvas(link, canvasId, filename) { link.href =
ASP.NET 项目 我将使用 Azure 进行存储。问题(要求): 在我的项目中,我让注册用户下载文件。但我不希望用户将此下载链接分享给未注册的人(例如:我给注册用户的下载链接只能在他们的计算机上下
我编写了一个servlet,用于检查http header ,但我不知道为什么当页面加载时,它会自动开始下载。 /* * To change this template, choose To
我正在尝试将下载添加到我的网络浏览器,但遇到的问题是获取您尝试下载的文件的名称。这是我的下载代码: engine.locationProperty().addListener(new ChangeLi
我正在尝试下载网站的 html: String encoding = "UTF-8"; HttpContext localContext = new BasicHttpContext();
我制作了一个带有“开始下载”按钮的框架,用于从网站下载 JAR。 问题是每当我点击开始下载按钮时,整个框架就会卡住,直到下载完成,然后就正常了。 我该如何解决这个问题? 这是单击按钮时执行的代码 p
我得到这段代码来实现一些东西,它可以帮助我从给定的 URL 下载文件。 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSes
我正在尝试创建一个 Controller 来使用流方法下载和上传文件,在我的例子中,所有文件都作为 Blob 保存在数据库中。我阅读了 Jboss Netty 的文档,但我认为这不是我的最佳解决方案。
下载并保存文件 let destination: DownloadRequest.DownloadFileDestination = { _, _ in // var fileURL = sel
使用 htaccess 我基本上试图禁止访问该页面,即 http://example.com , 但它仍然允许人们下载文件,如果他们有直接链接即 http://example.com/hi.zip .
我正在寻求将脚本与我的控制面板集成,并且由于我是新手脚本编写者而遇到问题。我想做的是用 1 个脚本下载一个文件并解压它。 示例: wget http://example.com/example.tar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
这个问题在这里已经有了答案: Top techniques to avoid 'data scraping' from a website database (14 个答案) 关闭 5 年前。 我有
这个问题在这里已经有了答案: Reading and parsing email from Gmail using C#, C++ or Python (6 个答案) 关闭 7 年前。 我只是想,是
我是一名优秀的程序员,十分优秀!