gpt4 book ai didi

python - 如何让脚本等待一段时间,以便加载来自 ajax 响应的数据,然后捕获网页

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:34 25 4
gpt4 key购买 nike

我正在捕获网页,但我希望脚本在捕获它之前应该等待一段时间,因为我现在正在使用 AJAX 填充一些数据,脚本不会在加载 ajax 数据之前等待和捕获网页。

我正在使用以下代码。

import blockspring
from selenium import webdriver
import time
import json

def screenshot(request, response):
driver = webdriver.PhantomJS(executable_path='/usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs')
driver.set_window_size(request.params["width"] or 1024, request.params["height"] or 768) # optional
driver.implicitly_wait(30) # seconds
driver.get(request.params["url"])
driver.save_screenshot('my_screenshot.png')
response.addFileOutput("screenshot", "my_screenshot.png")
response.end()


blockspring.define(screenshot)

最佳答案

等待页面完全加载的唯一可靠方法是使用 explicit waits .当有 AJAX 请求时,他们会更改页面中的某些内容。因此,您需要等待这些更改发生。您必须确定将什么元素添加(或删除)到页面作为最后一个元素,确定该元素的选择器是什么并等待它。

这是文档中的示例(它与 PhantomJS 的工作方式相同):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()

此代码等待 10 秒,直到出现错误。您可以使用此时间来指定站点加载或执行某些操作的可接受时间。如果它没有及时完成它们并且测试用例失败,您就会知道该站点太慢并且必须进行优化或者该站点已经更改并且您必须进行调整。它也可能是网络错误和一百万个其他问题。

使用sleep 的静态方式更容易添加,但可能会导致意想不到的结果。当 AJAX 请求花费的时间超过预期时,处理可能会在页面加载之前继续。如果您使用较长的 sleep 时间,那么您就浪费了不必要的等待时间。

关于python - 如何让脚本等待一段时间,以便加载来自 ajax 响应的数据,然后捕获网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com