【问题标题】:Can't take screenshot using selenium无法使用 selenium 截屏
【发布时间】:2017-12-15 00:27:30
【问题描述】:

在运行selenium截取网页截图时遇到了一个奇怪的问题,下面是我的部分代码:

url = "http://acme.com/licensemaker/licensemaker.cgi?state=California"
driver = webdriver.PhantomJS()
driver.maximize_window()
elem = driver.get(url)
elem = \
driver.find_element_by_xpath
('/html/body/form/center/div/table/tbody/tr[2]/td/input[2]')
elem.send_keys(comb)
driver.find_element_by_xpath
('/html/body/form/center/div/table/tbody/tr[2]/td/input[3]').click()
driver.save_screenshot('../screenshots/1.png')
print('ok')
img = driver.find_element_by_xpath('/html/body/center[1]/div/a/img')
location = img.location
size = img.size
print(size)

我尝试了 PhantomJS 和 Safari 驱动程序,它们都无法保存屏幕截图,但我可以获得“ok”的输出和“location”的值。 我不明白为什么我不能保存截图。

通过绝对路径保存文件失败,但只有名称有效。我去年使用了与相对路径相同的 Selenium 版本,发生了什么?

save_screenshot() 的结果是True

操作系统:macOS Sierra 10.12.5 解释器:2.7.12(/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7) 另外,我正在使用 Pyenv,我的 Pyenv 全局是“系统”。

【问题讨论】:

  • According to the docs 你必须使用完整路径:“如果有任何 IOError,则返回 False,否则返回 True。在文件名中使用完整路径。[...] 用法:driver.save_screenshot(' /Screenshots/foo.png')"
  • 试试不带路径只带名称,看看截图是否保存在程序目录中
  • @try-catch-finally 绝对路径失败,但只有名称有效。我去年使用了与相对路径相同的 selenium 版本,发生了什么?
  • @Exprator 唯一的名字是好的。谢谢。
  • Per source 我不明白为什么相对路径不起作用。我对其进行了测试,它可以工作(在 Linux 上)。请编辑您的帖子并添加您正在运行测试的平台。

标签: python python-2.7 selenium web-scraping web-testing


【解决方案1】:

您可以将以下函数用于相对路径,因为绝对路径不是添加到脚本中的好主意

导入

import sys, os

使用代码如下:

ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
screenshotpath = os.path.join(os.path.sep, ROOT_DIR,'Screenshots'+ os.sep)
driver.get_screenshot_as_file(screenshotpath+"testPngFunction.png")

确保创建 .py 文件所在的文件夹。

os.path.join 还会阻止您在跨平台上运行脚本,例如:unix 和 windows。它将在运行时根据操作系统生成路径分隔符。它类似于 java 中的 File.separtor

【讨论】:

    【解决方案2】:

    您必须考虑这样一个事实,即在调用 save_screenshot() 时,您必须提及您希望将屏幕截图保存到的完整路径。这应该以.png 扩展名结尾。根据您的情况,您可以考虑通过IDE手动 在项目空间内创建一个名为"screenshots" 的目录。在您的代码中提及路径为:

    driver.save_screenshot('/screenshots/123.png')
    

    【讨论】:

    • 不幸的是,我仍然无法保存屏幕截图,但是,当我只使用名称时,它起作用了,奇怪。
    • @ShubhamJain 更新了答案。让我知道状态。
    • 谢谢@DebanjanB - 我找到了另一种方法并将其发布为答案。我也会尝试你的解决方案..感谢分享:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多