我有一个小问题,我要上传已采取一(截图)图像selenium driver
和PhantomJS
我的网站,并把它放到数据库中。
我正在使用该get_screenshot_as_file()
功能将图像保存在当前目录中,如果该过程成功完成,则此功能只是给我True
或False
值,但是我需要的是文件名,以便将其保存在数据库中。
这是我的观点和模型片段:
models.py
class Driver(PhantomJS):
def __init__(self, *args, **kwargs):
super(Driver, self).__init__(*args, **kwargs)
self._log = StderrLog()
class ScreenShot(db.Model):
id = db.Column(db.Integer, primary_key=True)
image = db.Column(db.String(255), default=None)
title = db.Column(db.String(80))
describe = db.Column(db.Text)
def __init__(self, image, title, describe):
self.image = image
self.title = title
self.describe = describe
def __repr__(self):
return "Title %r" %self.title
views.py
from blog.form import ScreenShotForm
from blog.models import ScreenShot, StderrLog, Driver
@app.route('/my_works/', methods=('GET','POST'))
@only_author
def my_works():
blog = Blog.query.first()
form = ScreenShotForm()
if form.validate_on_submit():
url = request.args.get(url_for('index'), form.title.data)
width = int(request.args.get("w", 1200))
min_height = int(request.args.get("h", 400))
wait_time = float(request.args.get("t", 20)) / 1000 # ms
driver = Driver()
driver.set_window_position(0, 0)
driver.set_window_size(width, min_height)
driver.set_page_load_timeout(100)
driver.implicitly_wait(100)
driver.get(url)
driver.set_window_size(width, min_height)
time.sleep(wait_time)
sys.stderr.write(driver.execute_script("return document.readyState") + "\n")
image = driver.get_screenshot_as_file(os.urandom(3).encode('hex')+'.png')
title = form.title.data
describe = form.describe.data
scrshot = ScreenShot(image, title, describe)
db.session.add(scrshot)
db.session.commit()
driver.quit()
flash('Screenshot added.')
return redirect(url_for('index'))
#driver.get_screenshot_as_file('foo.png')
#return "<h1>Image saved</h1>"
#return Response(png, mimetype="image/png")
return render_template('blog/my_works.html', blog=blog, form=form)
表格
class ScreenShotForm(Form):
title = StringField('Site',[validators.Required(), validators.length(max=80)])
describe = TextAreaField('Describtion', validators=[validators.Required()])
如您所见,正在使用os.urandom(3).encode('hex')+'.png'
它可以给我一个随机的屏幕快照名称,这样我就不会感到困惑,在数据库中我得到1,这意味着True
,在我的项目文件夹中,我也25de0a.png
完美地获得了屏幕截图文件,听起来不错! !!!,但我不希望这种情况发生,我想获取文件名而不是True
orFalse
表达式。
这是我在数据库中得到的片段:
+----+-------+-------------------------+-------------------+
| id | image | title | describe |
+----+-------+-------------------------+-------------------+
| 6 | 0 | http://www.youtube.com/ | testing testing . |
| 7 | 1 | http://www.youtube.com/ | asdasfasfwf324214 |
+----+-------+-------------------------+-------------------+
我尝试了该get_screenshot_as_png()
功能,我得到的是图像的源代码。
如果结果如下,那将是很好的:
+----+-------+-------------------------+-------------------+
| id | image | title | describe |
+----+-------+-------------------------+-------------------+
| 6 | 25de0a.png | http://www.youtube.com/ | testing testing . |
| 7 | 25de0a.png | http://www.youtube.com/ | asdasfasfwf324214 |
+----+-------+-------------------------+-------------------+
最终,请任何帮助将吨吨吨赞赏:)。
您将所需的文件名传递到get_screenshot_as_file
方法中(如您现在所做的那样)。get_screenshot_as_file
如果文件已成功写入,则该方法返回True,否则返回False。
您的代码应类似于:
image_filename = os.urandom(3).encode('hex')+'.png'
if driver.get_screenshot_as_file(image_filename):
# file was successfully written
title = form.title.data
describe = form.describe.data
scrshot = ScreenShot(image_filename, title, describe)
db.session.add(scrshot)
db.session.commit()
else:
# file was not written
pass
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句