【问题标题】:no such element: Unable to locate element:while web scraping Youtube comments没有这样的元素:无法找到元素:网络抓取 Youtube 评论时
【发布时间】:2018-03-10 04:10:54
【问题描述】:

我正在尝试使用 selenium 获取 youtube cmets,但出现错误。任何人都可以帮我解决这个问题。

from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=MNltVQqJhRE")
time.sleep(10)
D=driver.find_element_by_xpath('//yt-formatted-string[@id="content-text"]')
print(D.text)

我明白了

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//yt-formatted-string[@id="content-text"]"}

它适用于这段代码。但它没有抓取所有的 cmets。我在堆栈溢出中找到了这段代码。

driver=webdriver.Chrome()

driver.get('https://www.youtube.com/watch?v=iFPMz36std4')

driver.execute_script('window.scrollTo(1, 500);')

#now wait let load the comments
time.sleep(5)

driver.execute_script('window.scrollTo(1, 3000);')



comment_div=driver.find_element_by_xpath('//*[@id="contents"]')
comments=comment_div.find_elements_by_xpath('//*[@id="content-text"]')
for comment in comments:
    print(comment.text)

【问题讨论】:

    标签: python python-3.x selenium selenium-chromedriver


    【解决方案1】:

    您的问题是该 ID 不存在(至少对我而言不存在)。找到一个ID。如果您使用的是chrome,只需右键单击元素(检查后),然后复制xpath即可获取元素的xpath。

    【讨论】:

    • 然后使用.find_element_by_id('content-text'),看看有没有什么收获。如果可以,那就是类名有问题,否则,就是id有问题
    • @ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 ..我得到这个 D=find_element_by_id('content-text') NameError: name 'find_element_by_id' is not defined
    • driver.find_element_by_id('content-text')
    • @ ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 它仍然显示相同的错误。我已经包含了另一个有效的代码,但我不知道它是如何工作的。它没有显示所有的 cmets。
    • 你说的是哪个错误? NameError 或 NoSuchElementException
    【解决方案2】:

    浏览器需要等到文档准备好。最佳时间点约为 4500 毫秒。然后,您可以将 cmets 部分滚动到视图中并等待它滚动大约 3000 毫秒。在此之后,#context-text 将就在 DOM 中。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait as wait
    
    driver = webdriver.Chrome()
    url="https://www.youtube.com/watch?v=MNltVQqJhRE"
    driver.get(url)
    
    wait(driver, 4500)
    
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 500);")
    driver.implicitly_wait(3000)
    
    content = driver.find_element_by_xpath('//yt-formatted-string[@id="content-text"]')                                          
    
    print(content.text)
    

    【讨论】:

    • 非常感谢。它有效。你能说这行是做什么的driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 500);")
    • 它将评论部分滚动到视图中。主要是第一部分
    • 非常感谢。这让我头疼了一天。
    • 我很抱歉,但正如你所说,它正在加载评论部分的第一部分。如何获取该页面上的所有 cmets
    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2019-09-23
    • 2021-11-07
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多