【问题标题】:How to get background-image from inline css using selenium如何使用 selenium 从内联 css 获取背景图像
【发布时间】:2020-03-24 22:47:09
【问题描述】:

使用 python 如何使用 selenium 获取背景图像?哪个有内联 CSS?我想从背景图片中获取图片 URL:url()

<div id="pic" class="pic" data-type="image" style=" background-image: url(http://test.com/images/image.png;); height: 306px; background-size: cover;"></div>

【问题讨论】:

标签: python selenium xpath css-selectors value-of-css-property


【解决方案1】:

要获取背景图像,您需要使用value_of_css_property(property_name) 方法,并且您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    import re
    
    my_property = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.pic#pic[data-type='image']"))).value_of_css_property("background-image")
    print(re.split('[()]',my_property)[1])
    
  • 使用XPATH

    import re
    
    my_property = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='pic' and @id='pic'][@data-type='image']"))).value_of_css_property("background-image")
    print(re.split('[()]',my_property)[1])
    
  • 控制台输出:

    test.com/images/image.png
    

更新

由于网址被双引号括起来,即"...",您可以使用以下解决方案:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='pic' and @id='pic'][@data-type='image']"))).value_of_css_property("background-image").split('"')[1])

参考文献

您可以找到几个相关的讨论:

【讨论】:

  • 这很有帮助,但我得到的值是“url(”test.com/images/image.png")”如何获取 url 内的确切链接
  • @Anjali 查看更新的答案并告诉我状态。
  • @DebanjanB 您的方法在两端都给出了“”的结果,但是在结果中添加 ["] 这个模式给了我确切的 URL。谢谢你的解决方案
  • @Anjali 使用 HTML 的 css 属性是 background-image: url(http://test.com/images/image.png;); 并且没有引号。因此,webapp 可能会将引号添加到 string 中,除非我们运行应用程序,否则我们无法识别。我了解在模式中添加 " 解决了您的问题。
  • @Anjali 如果可行,您能否使用我添加的替代选项来检查并更新我的结果作为答案的更新?
【解决方案2】:

试试这个:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.pic#pic[data-type='image']"))).get_attribute("href"))

【讨论】:

    【解决方案3】:

    要获得URL,您需要使用regular expression。 为了使用正则表达式Import re,然后使用下面的正则表达式。

    import re
    itemimage=WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#pic"))).value_of_css_property("background-image")
    print(re.search("(?P<url>http?://[^\s;]+)", itemimage).group("url")) 
    

    输出

    http://test.com/images/image.png
    

    【讨论】:

      【解决方案4】:
       my_setup = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH, "//body/div[@class='container']/div[@class='row']/div[@class='card-stack']/div/div[1]/div[1]"))).value_of_css_property("background-image")
      
      image_url = re.split('[()]',my_setup)[1]
      

      使用它实际上对我来说很好用..

      主要内容..

      .value_of_css_property("background-image")  
      

      不适用于列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-26
        • 2011-08-22
        • 2015-09-09
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2011-03-07
        相关资源
        最近更新 更多