【发布时间】:2019-08-27 15:49:54
【问题描述】:
想要创建网页图像,但必须等待它完全加载(包括 AJAX)。
等待时间应由硬编码值设置,而不是等待元素。
以下截图,无需等待:
from selenium import webdriver
driver=webdriver.PhantomJS()
driver.set_window_size(w,h)
driver.get('webpage_address')
driver.save_screenshot('/path/to/dir/foo.png')
driver.quit()
基于一些documentation:
from selenium import webdriver
driver=webdriver.PhantomJS()
driver.set_window_size(w,h)
driver.implicitly_wait(t)
driver.get('webpage_address')
driver.save_screenshot('/path/to/dir/foo.png')
driver.quit()
但是,这并没有输出图像,也似乎没有在等待。
非常感谢任何帮助!
【问题讨论】:
-
您确定页面加载正常吗? PhantomJS 是一个使用 QtWebKit 进行页面渲染的无铬浏览器,而不是最新最好的 Gecko 或 Chromium 引擎。我很想知道是否有任何 JavaScript 错误被抛出。您可能正在尝试解决错误的问题...
-
嗨@GregBurghardt,没有等待计时器的初始示例在多次重复使用后似乎确实间歇性地工作。有没有办法进行调试?似乎找不到详细模式。
-
如果您在截屏前调用
time.sleep(10)强制暂停线程怎么办?也许将睡眠时间增加到 30 秒只是为了看看? -
嗨@GregBurghardt,将
implicitly_wait换成time.sleep(30)。这似乎工作得更好,每次运行脚本时都会生成相同的屏幕截图。但是,网页的 AJAX 更改不在屏幕截图中。就好像driver目前没有观察到它们。尝试了长达 60 秒的睡眠,而输出没有变化。有任何想法吗..? 非常感谢! -
页面上是否有 JavaScript 监听用户生成的事件,但在 PhantomJS 浏览器会话期间没有发生?触发 AJAX 调用是否需要用户操作?
标签: python ajax python-3.x selenium phantomjs