【问题标题】:Is there a way to read data from the shadowroot using selenium webdriver有没有办法使用 selenium webdriver 从 shadowroot 读取数据
【发布时间】:2021-11-22 04:32:06
【问题描述】:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
driver = webdriver.Firefox(executable_path=r'C:\Users\******\Downloads\geckodriver.exe', options=options)
#driver.get('http://google.com/')
url =  "https://www.foxnews.com/sports/nfl-great-frank-gore-says-hall-of-famer-numbers-speak-themselves"
driver.get(url)
item = driver.execute_script("return document.querySelector('div.article-comments').shadowRoot.querySelector('ul.spcv_messages-list')")
print(item.text)
driver.maximize_window()
driver.get(url)

注意:我正在尝试抓取福克斯新闻 cmets:https://www.foxnews.com/sports/nfl-great-frank-gore-says-hall-of-famer-numbers-speak-themselves。请帮我解决这个问题

【问题讨论】:

    标签: python-3.x selenium-webdriver beautifulsoup


    【解决方案1】:

    你可以试试这个脚本。

    import time
    
    ....
    
    driver.maximize_window()
    driver.get(url)
    time.sleep(5)
    item = driver.execute_script('''
        let divs =  document.querySelector('div.article-comments').querySelectorAll('div');
        let shadowroot = null;
        for (el of divs) {
            if (el.hasAttribute('data-spot-im-shadow-host')) {
                shadowroot = el.shadowRoot;
            }
        }
    
        return shadowroot.querySelector('ul.spcv_messages-list');
    ''')
    

    在您的情况下,div.article-comments 没有shadowRoot 属性,您需要选择包含它的特定元素。在这种情况下,div 将具有属性 data-spot-im-shadow-host。

    【讨论】:

    • 嗨 sharmiko,感谢您的回复,但它仍然返回 null。所以我尝试改变 let shadowroot = 0 然后它仍然没有返回
    • 我认为有时加载所有内容需要时间。我增加了 5 秒的睡眠时间。
    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2017-11-13
    • 2019-04-04
    相关资源
    最近更新 更多