程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

解决Selenium在chrome中播放视频报错:play() failed because the user didn't interact with the document first.

发布于2020-03-18 11:34     阅读(7002)     评论(0)     点赞(6)     收藏(5)


selenium在chrome浏览器中自动化播放html5中的视频时,遇到如下报错:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response

    raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.JavascriptException: Message: javascript error: play() failed because the user didn't interact with the document first. https://goo.gl/xX8pDD

Python代码如下: 

  1. #在selenium的实现中options会被转为KEY="goog:chromeOptions"的capability
  2. browser=webdriver.Chrome(executable_path=chrome_driver_path,options=options,
  3. desired_capabilities=caps)
  4. #请求html5视频测试页面
  5. browser.get(html5_url)
  6. time.sleep(3)
  7. #定位视频播放控件
  8. video=browser.find_element_by_xpath("/html/body/video")
  9. #播放视频
  10. video_play=browser.execute_script("returnarguments[0].play()",video)
  11. print(f'video_play:{video_play}')
  12. time.sleep(5)

从网上得知:

Chrome的autoplay政策在2018年4月做了更改,在页面没有产生用户交互时时不能进行自动播放的

所以解决方案是:

先执行用户点击行为再进行播放

 

改进后的代码如下:

  1. #在selenium的实现中options会被转为KEY="goog:chromeOptions"的capability
  2. browser=webdriver.Chrome(executable_path=chrome_driver_path,options=options,
  3. #请求html5视频测试页面
  4. browser.get(html5_url)
  5. time.sleep(3)
  6. #定位视频播放控件
  7. video=browser.find_element_by_xpath("/html/body/video")
  8. #获得视频的URL
  9. video_url=browser.execute_script("returnarguments[0].currentSrc",video)
  10. print(f'video_url:{video_url}')
  11. #只是获取一下视频控件的属性,不算互动
  12. p_width=video.get_property('width')
  13. print(p_width)
  14. #需要click一下才行,也可以其它的动作,可以自行实验
  15. video.click()
  16. #播放视频并停留一段时间
  17. video_play=browser.execute_script("returnarguments[0].play()",video)
  18. print(f'video_play:{video_play}')
  19. time.sleep(5)
  20. #暂停视频
  21. #video.click()
  22. video_pause=browser.execute_script("returnarguments[0].pause()",video)
  23. print(f'video_pause:{video_pause}')
  24. time.sleep(3)

 

本文参考了:https://www.cnblogs.com/lcidy/p/10039592.html

原文链接:https://blog.csdn.net/boweiqiang/article/details/104915472



所属网站分类: 技术文章 > 博客

作者:dfd323

链接:https://www.pythonheidong.com/blog/article/265376/05b8a9d3e3d8b1790a8f/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

6 0
收藏该文
已收藏

评论内容:(最多支持255个字符)