如果通过 python selenium 和美丽的汤嵌套在视频内的源标签内,则无法抓取 src

Posted

技术标签:

【中文标题】如果通过 python selenium 和美丽的汤嵌套在视频内的源标签内,则无法抓取 src【英文标题】:Unable to scrape the src if it is nested inside the source tag inside video via python selenium and beautiful soup 【发布时间】:2022-01-04 05:34:45 【问题描述】:

我正在抓取一个动漫网站作为一个项目,但是当我试图抓取 src 时,它给了我一个错误。 src 嵌套在源标签内。我在下面给出截图和代码。

example screenshot

代码:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from bs4 import BeautifulSoup
    import re
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

#launch url
url = "https://bestdubbedanime.com/Demon-Slayer-Kimetsu-no-Yaiba/26"

# create a new Firefox session
driver = webdriver.Firefox()
# driver.implicitly_wait(30)
driver.get(url)

# python_button = driver.find_element_by_class_name('playostki') #FHSU
# python_button.click() #click fhsu link

  soup1 = BeautifulSoup(driver.page_source, 'html.parser')

  video = soup1.find('video', id='my_video_1_html5_api')
  # video = driver.find_element_by_id('my_video_1_html5_api')
  WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".playostki"))).click()      
   driver.stop_client
   driver.close
   driver.quit

【问题讨论】:

【参考方案1】:

没有获取到src标签的原因,是因为点击视频后才显示。您必须先点击该视频,然后尝试从元素中找到“src”属性。

driver.maximize_window()
driver.get("https://bestdubbedanime.com/Demon-Slayer-Kimetsu-no-Yaiba/26")
WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPATH,  "//div[@class='playostki']//img"))).click()
print(WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#my_video_1_html5_api > source"))).get_attribute("src"))
driver.quit()

输出:

https://bestdubbedanime.com/xz/api/v.php?u=eVcxb0ZCUEMraFd1Vi9pM2xqWUhtbXZMWjZ0Mlpoc1U0Tmhqc2VFcVViQUc3VUVhR0pZV1EvaW1nY1duaXBMeXYvUUY4RG5ab3p4MEtEMUFHRmVaN0taVG9sY3ZVcTRoeDZoVHhWLzdiYjQ5UStNN2FYSjJBSWNKL0t5S1hLNGEyVlZqV1BYQ2MwaCsyNWcvak1Db01EMnNtWGwwTTBBVld4MkNER0V3eGNCRXJ0cEY4RHFPclhwbTJpWFBPSmJI

【讨论】:

非常感谢。但是你能告诉我为什么我的代码不起作用,因为我也点击了按钮。不过谢谢 因为你的 css 定位器不正确。它突出显示页面上的多个元素。 哦,谢谢。我也可以减少时间吗? 是的,这是明确的等待。这意味着,最多将等待 60 秒。如果元素将在 2 秒后出现,则不会等待 60 秒。它将在 2 秒内执行。但最长会等待 60 秒。 @QualityMatters 另外记得在使用WebDriverWait()时劝阻implicitly_wait()

以上是关于如果通过 python selenium 和美丽的汤嵌套在视频内的源标签内,则无法抓取 src的主要内容,如果未能解决你的问题,请参考以下文章

Behave + Selenium(Python) 三

[美丽的汤料,使用Python到MySQL。如果字符串包含,则继续执行其他操作

selenium+python定位方式

通过 Selenium 和 Python 和 JavaScript 使 WebElement 可见

如何根据提供的HTML通过Selenium和Python搜索节点?

Python+Selenium自动化篇-8-设置等待三种等待方法