使用 selenium 使用 css 选择器查找后如何获取项目 url

How to get item url after finding with css selector using selenium

我试图从网页中提取 url(link),我使用“find_element_by_css_selector”来获取我想要的项目。此项目中有一个 url。我如何提取此 url.

我试过:

prod_item = browser.find_elements_by_css_selector('div.col-lg-2')
print(prod_item[0].get_attribute('href'))

但我得到“None”作为输出。我喜欢使用 css_selector,因为页面上有许多相似的项目,而 'div.col-lg-2' 是它们共有的属性。 如何解决这个问题并获得 link?

这里是完整的代码:

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

url = 'https://auctionmaxx.com/Browse?page=0'

browser = webdriver.Firefox()
browser.get(url)


prod_item = WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.col-lg-2[href]")))

print(prod_item[4].get_attribute('href'))

这一定有用,

  browser.find_elements_by_css_selector('a').get_attribute('href')

代码似乎是合法的,所以起初我会尝试检查原始 html 源代码(使用 curl 或禁用 JS 的浏览器)。也许 href 属性在您尝试获取它的值时不包含任何 url,并且该值在其他属性中(例如在 data-href 中)或者它是通过 ajax 动态加载的。无论如何,请查看 Waits or this link 的文档,您可以在其中找到一些提示,了解如何等待特定内容可用。

要打印 href 属性的值,您必须引入 for the visibility_of_all_elements_located() and you can use either of the following :

  • 使用CSS_SELECTOR:

    browser.get("https://auctionmaxx.com/Browse?page=0")
    prod_item = WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.col-lg-2>div a")))
    print(prod_item[0].get_attribute('href'))
    
  • 在一行中使用 CSS_SELECTOR:

    browser.get("https://auctionmaxx.com/Browse?page=0")
    print(WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.col-lg-2>div a")))[0].get_attribute('href'))
    
  • 控制台输出:

    https://auctionmaxx.com/Listing/Details/321939965/NEW-PUREX-LAUNDRY-DETERGENT-924L
    
  • 注意:您必须添加以下导入:

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