使用Selenium启动网站时如何禁用自动播放

Cha*_*han 0 javascript python selenium

某些网站会自动播放视频或放大图像。如何使用Selenium和Python停止它?

非常感谢你。

Edu*_*scu 6

这实际上取决于情况,因为您的问题过于笼统,所以我假设有两种情况:

1)您正在谈论标签的autoplay属性video。设置autoplayfalse仍然无法播放某些视频。看到这种情况摆弄。

一种确定的方法是注入一个脚本来停止所有视频,如下所示:

import selenium
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("user-data-dir=other")
driver = webdriver.Chrome(chrome_options=chrome_options)
#driver.get("https://blog.synq.fm/html5-video-looping-autoplay-on-ios-and-android#gist48620519")
driver.get('https://www.facebook.com/LaneigeHongKong/posts/1542227299146098%22')
sleep(5)
driver.execute_script('videos = document.querySelectorAll("video"); for(video of videos) {video.pause()}')
Run Code Online (Sandbox Code Playgroud)

另外,由于视频已停止,因此您可能想添加控件(播放,酒吧等),以防它们稍后启动,在这种情况下,JavaScript位如下所示:

videos = document.querySelectorAll("video"); for(video of videos) {video.pause(); video.controls = true}
Run Code Online (Sandbox Code Playgroud)

如果video标记位于影子根元素中,则上述情况将不起作用,但是几乎没有任何常规解决方案可以起作用。在那里,您将需要自定义方法。

2)您通常是在谈论自动播放,但不幸的是,这里没有通用的解决方案,一种方法是将设置保存在需要自动备份的网站上,我使用了Chrome选项user-data-dir来将文件夹用作配置文件,我运行:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Run Code Online (Sandbox Code Playgroud)

您可以在此处进行检查人机交互的登录名,或更改设置(例如:禁用自动播放),然后每次使用该文件夹启动Webdriver时都需要我现在需要的cookie。您也可以手动安装扩展,并在每个会话中使用它们。在我运行的第二个时间里,所有的cookie都在那里:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see  the cookies, the settings, Extensions and the logins done in the previous session are present here
Run Code Online (Sandbox Code Playgroud)

优点是您可以使用具有不同设置和Cookie的多个文件夹,无需加载,卸载Cookie,安装和卸载扩展程序,更改设置,通过代码更改登录名的扩展程序,因此无法中断程序的逻辑,等等这比通过代码完成所有操作要快。