【问题标题】:How to get item url after finding with css selector using selenium使用 selenium 使用 css 选择器查找后如何获取项目 url
【发布时间】:2020-11-17 08:19:23
【问题描述】:

我正在尝试从网页中提取 url(链接),我使用“find_element_by_css_selector”来获取我想要的项目。这个项目有一个网址。如何提取此网址。

我试过了:

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

但我得到“无”作为输出。我很想使用 css_selector,因为页面上有许多类似的项目,而 'div.col-lg-2' 是它们共同的属性。 如何解决这个问题并获取链接?

这里是完整的代码:

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'))

【问题讨论】:

    标签: python selenium web-scraping automation webautomation


    【解决方案1】:

    要打印 href 属性的值,您必须为visibility_of_all_elements_located() 引入WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用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
      

    【讨论】:

    • 谢谢。我已经编辑了我的代码,但它仍然无法正常工作。我已经用完整的代码编辑了这个问题。可以看看吗?
    • @ebere 通常<div> 不会包含href 属性,但我的回答仍然是基于您的研究。现在,当您分享link 时,似乎大孩子<a> 标签包含href 属性。查看更新的答案并让我知道状态。
    • 是的,就是这样。这完美地工作。非常感谢
    • @ebere 很高兴能为您提供帮助。 Vote up questions and answers 你觉得很有帮助。见Why is voting important
    【解决方案2】:

    这必须有效,

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

    【讨论】:

    • 页面上还有其他元素是链接,也有选择器'a'。我只想在具有选择器“div.col-lg-2”的元素中获取“href”
    • 你能明确写出整行/块的样子吗?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      • 1970-01-01
      • 2015-02-04
      相关资源
      最近更新 更多