【问题标题】:Get href link with selenium (python)使用 selenium (python) 获取 href 链接
【发布时间】:2022-01-14 01:41:16
【问题描述】:

我想从子元素中获取所有 href。 父类是search-content 它有父 div card-col,在这些 div 中还有另外 1 个 div,然后是 href。我只想得到这个href链接

这是我的代码-->

el=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME, "search-content-cards")))
el_hrefs=el.find_elements_by_xpath(".//a[@href]")
for i in el_hrefs:
    print(i)

输出是很多元素

<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="f7c84bf8-c20c-4b70-8ba5-414e822bba21")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="1e078e8b-104f-4299-94b1-8741cf30f047")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="d8b4b5e0-6291-4fd2-ae04-faee245462d1")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="ef06e8ac-321c-40db-9f6c-40dd3a3b07de")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="e14cf667-1bf4-434c-b9a2-1c4f362398d2")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="8e549221-eca4-41cf-943d-3cb0f6f75d50")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="afd597fb-1bb0-48fb-8646-6c43cb17ab38")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="8f3a655e-d3cd-4748-934a-2c9000481ed3")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="a1706e30-fad0-4799-871f-c5a928c69009")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="156847c9-5d7f-4963-82fa-baaf2b8f6e7f")>
<selenium.webdriver.remote.webelement.WebElement (session="0a4b52d1575e427e34d6b790a284c501", element="99c320b4-f6f1-4eb4-abec-4be4df790b71")>

谁能帮帮我?

【问题讨论】:

    标签: python html selenium parsing xpath


    【解决方案1】:

    在你的情况下iweb element,要提取.text,你不应该只打印i,它应该是print(i.text)

    此外,如果你想从a tag 中提取href,那么你应该使用.get_attribute('href')

    其次,我认为你应该使用CSS_SELECTOR

    div.search-content-cards
    

    而不是CLASS_NAME

    另外标签是后代

    所以你的有效代码应该是这样的:

    el = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.search-content-cards")))
    el_hrefs = el.find_elements_by_xpath(".//descendant::a[@href]")
    for i in el_hrefs:
        print(i.get_attribute('href'))
    

    【讨论】:

    • 你能告诉我head中的div是什么意思吗? (div.search-content-cards) 我不能只用类名访问?
    • 那个div有一个类(名字有多个空格),如果你使用这个类名,Selenium将无法找到任何导致空格的元素,你可以去掉空格并把@987654333 @ 在其中创建一个 CSS 选择器。
    • 好的,谢谢。
    【解决方案2】:

    要提取 href 属性的值而不是 presence_of_element_located(),您需要为 visibility_of_all_elements_located() 引入 WebDriverWait,您可以使用以下任一 Locator Strategies

    • 使用CSS_SELECTOR

      print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.search-content-cards a.d-block")))])
      
    • 使用XPATH

      print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[contains(@class, 'search-content-cards')]//a[contains(@class, 'd-block')]")))])
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多