【问题标题】:Selenium Python Get Img SRC Returns Actual Image DataSelenium Python Get Img SRC 返回实际图像数据
【发布时间】:2020-04-28 13:27:09
【问题描述】:

我正在使用 Python 中的 Selenium 并使用 Firefox Web 驱动程序。

我正在尝试获取图像的 SRC。当我第一次请求 SRC 时,我得到的是实际的图像数据,而不是 SRC

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ ...

如果我第二次运行完全相同的代码,我将获得 SRC

example.jpg

这是我的代码

fireFoxOptions = webdriver.FirefoxOptions()
fireFoxOptions.set_headless()
browser = webdriver.Firefox(firefox_options=fireFoxOptions)

element = browser.find_element(By.ID , "idOfImageHere" )
imageUrl = element.get_attribute("src")
print("image src: " + imageUrl)

不知道为什么在第一次运行代码时返回图像数据,然后在第二次运行时返回 src。似乎一旦图像被缓存,它就可以获得 src 或类似的东西。

关于如何防止图像数据被返回,只是 src 链接的任何建议?

谢谢

【问题讨论】:

  • src 必须在改变.. 可能有 javascript 重写了 src 属性。 (可能会先加载低分辨率版本或占位符)
  • 这是可能的。我是从亚马逊抓取的,所以我认为他们运行了一些花哨的代码。话虽如此,我并不在乎是否获得低分辨率图像的 SRC,我只是不想要图像数据
  • 您可以使用 WebDriverWait 来等待 SRC 以“.jpg”(或 .gif 等)结束

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

Amazon 网站元素是启用了JavaScript 的元素,因此要提取任何元素的src 属性,您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用关注Locator Strategies

  • 使用ID

    print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.ID, "idOfImageHere"))).get_attribute("src"))
    
  • 使用XPATH

    print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='idOfImageHere]"))).get_attribute("src"))
    
  • 使用CSS_SELECTOR

    print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#idOfImageHere"))).get_attribute("src"))
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 这很有趣。我会尝试一下并回复你。谢谢。
猜你喜欢
  • 2013-04-26
  • 2014-03-08
  • 2012-01-05
  • 2013-04-01
  • 2021-12-18
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多