Python 3.x 如何等待使用Selenium和Python定义src属性

Python 3.x 如何等待使用Selenium和Python定义src属性,python-3.x,selenium,xpath,webdriverwait,tagname,Python 3.x,Selenium,Xpath,Webdriverwait,Tagname,我用python编写了一个使用selenium的程序。 我的目标是在页面中找到视频的src。 这是我的密码 video_element = chrome_driver.find_element_by_tag_name("video") video_src = video_element.get_attribute("src") 当我尝试检查video\u src时,我会得到一个空字符串,但是如果我在尝试获取src之前输入time.sleep(1),我会得到视频的真正链接。 我试着用WebDri

我用python编写了一个使用selenium的程序。 我的目标是在页面中找到视频的src。 这是我的密码

video_element = chrome_driver.find_element_by_tag_name("video")
video_src = video_element.get_attribute("src")
当我尝试检查
video\u src
时,我会得到一个空字符串,但是如果我在尝试获取src之前输入
time.sleep(1)
,我会得到视频的真正链接。 我试着用
WebDriverWait
代替
time。像这样等待

video_element = WebDriverWait(chrome_driver, 3).until(
            expected_conditions.element_to_be_clickable((By.TAG_NAME, "video"))
        )
但是我找不到任何等待src标记被实际链接填充的条件。
有没有办法用硒来代替时间来等待?(随着时间的推移,并不保证src会被填满)

您可以尝试以下方法

video_element = WebDriverWait(chrome_driver, 3).until(
            expected_conditions.presence_of_element_located((By.XPATH, "//video[not(@src='')]"))
        )

你可以试试下面的

video_element = WebDriverWait(chrome_driver, 3).until(
            expected_conditions.presence_of_element_located((By.XPATH, "//video[not(@src='')]"))
        )

在切换到iframe之前,请尝试以下解决方案

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.get('https://www.thewatchcartoononline.tv/www-working-episode-1-english-subbed')
driver.switch_to.frame("anime-js-0")
video_element = WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.ID, "video-js_html5_api")))
val = video_element.get_attribute("src")
print val
输出:

在切换到iframe之前,请尝试下面的解决方案

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.get('https://www.thewatchcartoononline.tv/www-working-episode-1-english-subbed')
driver.switch_to.frame("anime-js-0")
video_element = WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.ID, "video-js_html5_api")))
val = video_element.get_attribute("src")
print val
输出:

要提取src属性的值,您必须为所需的
元素的可见性引入WebDriverWait()
,并且您可以使用以下任一项:

  • 使用
    CSS\u选择器

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.TAG_NAME, "video"))).get_attribute("innerHTML"))
    
  • 使用
    XPATH

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//video"))).get_attribute("src"))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

要提取src属性的值,必须为所需的
元素的可见性引入WebDriverWait()
,并且可以使用以下任一项:

  • 使用
    CSS\u选择器

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.TAG_NAME, "video"))).get_attribute("innerHTML"))
    
  • 使用
    XPATH

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//video"))).get_attribute("src"))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    


请提供您的网站或域名,例如网站中包含视频的页面。请注意,在获取视频元素之前,必须切换到视频帧。请告诉我,如果你需要完整的代码,请提供你的网站或域名的一个视频是在网站页面的例子。请注意,在获取视频元素之前,必须切换到视频帧。如果您需要完整的代码,请告诉我它不起作用,您想解释一下您使用的xpath吗?请等到
video
元素具有
src
属性值,该属性值不等于
。它似乎应该起作用,我不知道为什么不起作用。你自己检查过了吗?它不起作用,你想解释一下你使用的xpath吗?等到
video
元素的
src
属性值不等于
。它似乎应该起作用,我不知道为什么不起作用。你自己检查过了吗?我在切换之前尝试过这样做,但出现了超时异常(因为selenium找不到视频标签)。当我在切换后尝试您的解决方案时,它确实起作用,但只有当我使用timeout=20时,如果我使用timeout=3,它才起作用。这告诉我,它的行为就像时间一样。睡眠我遇到了与以前相同的问题,请检查您的代码超时=3而不是20,而且您没有使用您创建的chrome_选项,您的意思是这样做吗?我已删除chrome_选项,并将WebDriverWait更改为3,对我来说仍然可以正常工作。请检查更新的解决方案您是正确的,我忘记将定位器更改为id而不是标记名。我在切换之前尝试了此操作,但出现超时异常(因为selenium找不到视频标记)。当我在切换后尝试您的解决方案时,它确实起作用,但只有当我使用timeout=20时,如果我使用timeout=3,它才起作用。这告诉我,它的行为就像时间一样。睡眠我遇到了与以前相同的问题,请检查您的代码超时=3而不是20,而且您没有使用您创建的chrome_选项,您的意思是这样做吗?我已删除chrome_选项,并将WebDriverWait更改为3,对我来说仍然可以正常工作。请检查更新的解决方案您是正确的,我忘记将定位器更改为id而不是标记名