【问题标题】:Python Selenium get all urls extensions on a webpage as a listPython Selenium 将网页上的所有 url 扩展作为列表获取
【发布时间】:2020-06-09 02:20:09
【问题描述】:

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

<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 快照:

updated html

nested shadow roots

error

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow!我不了解您要询问的领域,但如果可以的话,我建议您将代码复制/粘贴到代码块中,而不是链接屏幕截图。这可能会增加人们做出回应的机会。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

要使用Selenium 在网页中获取网页中所有urls 的列表,您必须为visibility_of_all_elements_located() 诱导WebDriverWait,您可以使用以下任一@987654323 @:

  • 使用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) 中的元素的相关讨论:

【讨论】:

  • 感谢您的帮助,但是,当我运行代码时,我收到了我在帖子中更新的错误。这可能是因为我必须经历嵌套的影子根,我更新了 html 代码和我的代码以显示我是如何处理影子根的。再次感谢您。
  • @JaredWillamson 查看答案更新并告诉我状态。
  • 感谢您的帮助。我能够访问 url 所在的影子根目录,我什至可以找到它们所在的类 table.table-element-table。我使用 shadow_root4.find_element_by.... 并且能够在 URL 所在的影子根中找到元素。反正有没有使用我的 shadow_root4 修改原始答案中的代码。列出网址?
  • @JaredWillamson 好消息!!!很高兴能帮到你!!!请accept answer 点击我的answer 旁边的空心刻度线,它就在 votedown 箭头下方,这样刻度线就会变成 绿色.
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 2022-07-12
  • 2014-05-30
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多