【问题标题】:How to wait before screenshot of webpage using selenium and phantomjs in python3?如何在 python3 中使用 selenium 和 phantomjs 的网页截图之前等待?
【发布时间】: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


【解决方案1】:

也许等到给定页面上出现了一个元素,这意味着它已经完全加载(不是在所有情况下)你可以继续截屏:)

WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.ID, "myElement"))

driver.save_screenshot('/path/to/dir/foo.png')

【讨论】:

  • 我也试过这个方法。该网页几乎是完全异步生成的,因此该方法可能不太适合?没有保证最后加载并因此被跟踪的元素。如果使用“容器 div”,代码会在加载时立即运行。但是,我在这里错过了什么吗? 非常感谢!
  • 根据您的经验,您认为以非自动方式完全加载页面的总等待时间是多少?
  • 最坏的情况是大约 30 秒。 time.sleep(60) 没有完全解决问题。
  • 有意思,你上面的一个cmet说,即使你把等待时间增加到上面的范围,你仍然没有抓取到Ajax内容。也许用另一个非 selenium 的库截取屏幕截图可能会产生更好的结果。一些选项是:python-mss.readthedocs.io/examples.html
  • 这是正确的,AJAX 仍然导致问题。 python mss 是否在无头环境中工作?
【解决方案2】:

试试下面的代码:

driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS) ;
or
wait = WebDriverWait(browser, 10)

这里我们隐式要求代码等待 10 秒

【讨论】:

  • 这似乎返回一个空白图像;与使用driver.implicitly_wait(t) 相同
猜你喜欢
  • 2013-06-19
  • 1970-01-01
  • 2018-01-04
  • 2021-12-21
  • 2013-06-15
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多