首页 > 解决方案 > Python Selenium 将网页上的所有 url 扩展作为列表获取

问题描述

我正在尝试获取与 URL 相关的所有文本的列表。在网页中Ctrl++中的代码给了我这个ShiftI

<sr-cell-name name="Otto Kraf" url="/ark:/61903/1:1:Q247-6VCC" relationship="Principal" collection-name="New York, New York City, Police Census, 1890"></sr-cell-name>

页面上有 Otto Kraf 等 20 个名称的列表,我想列出与每个名称相关的 URL。

我试过driver_get_element_by(xpath, name, css_selecter, and xpath)了,但似乎没有人找到 URL。

HTML 的快照:

更新的 html

嵌套阴影根

错误

标签: pythonseleniumxpathcss-selectorswebdriverwait

解决方案


要使用Selenium在网页中获取网页中所有url的列表, 您必须诱导WebDriverWait并且您可以使用以下任一定位器策略visibility_of_all_elements_located()

  • 使用CSS_SELECTOR

    print([my_elem.get_attribute("url") for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.table.table-element-table span.td[name='name'] sr-cell-name[name][url]")))])
    
  • 使用XPATH

    print([my_elem.get_attribute("url") for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='table table-element-table']//span[@class='td' and @name='name']//sr-cell-name[@name and @url]")))])
    
  • 注意:您必须添加以下导入:

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

更新

元素似乎在#shadow-root (open). 您可以在以下位置找到一些有关如何访问#shadow-root (open)中的元素的相关讨论:


推荐阅读