使用 python/selenium 从元素 link 中提取部分文本

Extract partial text from element link with python/selenium

下面HTML,我的目标是return zzde7e35d-8d9d-4763-95d2-9198684abb12

<div class = container>    
    <a class="Blue-Button" data-type="patch" data-disable-with="Waiting" href="/market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12">Yes</a>
</div>

问题是,我什至无法在 div

中找到 URL
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL)

打印上面的内容,我似乎得到了一堆与 HTML 完全无关的随机字符,更不用说有问题的 URL 了。

如果它简化了问题,returned 的字符数将始终是相同的长度,建立索引是否容易解决?

如果你想获得 href 你需要使用 get_attribute('href') 这会给你 /market/opening/zzde7e35d-8d9d-4763-95d2-9198684abb12 然后 split() 这个你会得到最后一个元素。

link = example.url
driver.get(link)
URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')
print(URL.get_attribute('href').split("/")[-1])

输出:

zzde7e35d-8d9d-4763-95d2-9198684abb12

您可能错过了延迟。
而不是

URL = driver.find_element_by_xpath('//a[contains(@href,"market")]')

尝试使用

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

URL = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//a[contains(@href,"market")]'))).get_attribute("href")
print(URL)

您还必须从返回的 Web 元素对象中提取 href 属性值,如代码所示。
如果这仍然不起作用,请检查您尝试访问的元素是否在 iframe 等内部。或者定位器可能不是唯一的等。

要打印 href 属性的部分值,即 zzde7e35d-8d9d-4763-95d2-9198684abb12,您需要引入 WebDriverWait for the and you can use either of the following

  • 使用LINK_TEXT:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.LINK_TEXT, "Yes"))).get_attribute("href").split("/")[3])
    
  • 使用CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.Blue-Button[data-type='patch'][data-disable-with='Waiting'][href*='market']"))).get_attribute("href").split("/")[3])
    
  • 使用 XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='Blue-Button' and @data-type='patch'][@data-disable-with='Waiting' and contains(@href, 'market')]"))).get_attribute("href").split("/")[-1])
    
  • 注意:您必须添加以下导入:

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

You can find a relevant detailed discussion in