如何提取<;图>;在python中使用Selenium的图像?

如何提取<;图>;在python中使用Selenium的图像?,python,selenium,xpath,figure,Python,Selenium,Xpath,Figure,我正在尝试从app store中提取上面xpath中的图像: 我使用xpath尝试了以下代码: driver.get('https://apps.apple.com/us/app/mercer-marketplace-benefits/id1041417557') rating_distr = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH, """(//*[@id="ember290"]/div/

我正在尝试从app store中提取上面xpath中的图像:

我使用xpath尝试了以下代码:

driver.get('https://apps.apple.com/us/app/mercer-marketplace-benefits/id1041417557')
rating_distr = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH, """(//*[@id="ember290"]/div/div[2])""")))
print(rating_distr.get_attribute('innerHTML'))
但输出不是图像:

    <figure class="we-star-bar-graph">
    <div class="we-star-bar-graph__row">
      <span class="we-star-bar-graph__stars we-star-bar-graph__stars--5"></span>
      <div class="we-star-bar-graph__bar">
        <div class="we-star-bar-graph__bar__foreground-bar" style="width: 76%;"></div>
      </div>
    </div>
    <div class="we-star-bar-graph__row">
      <span class="we-star-bar-graph__stars we-star-bar-graph__stars--4"></span>
      <div class="we-star-bar-graph__bar">
        <div class="we-star-bar-graph__bar__foreground-bar" style="width: 12%;"></div>


有没有办法将输出提取为图像?谢谢你的帮助

打开网页并按id滚动到元素,当我检查id时,它是“ember290”,用于网页中所需的部分

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import pyscreenshot as ImageGrab

browser = webdriver.Chrome()  # we are using chrome as our webbrowser

browser.get('https://apps.apple.com/us/app/mercer-marketplace-benefits/id1041417557')
#rating_distr = WebDriverWait(browser,30).until(EC.presence_of_element_located((By.XPATH, """(//*[@id="ember290"]/div/div[2])""")))

ActionChains(browser).move_to_element(browser.find_element_by_id('ember290')).perform()

im=ImageGrab.grab()
im.show()

im=ImageGrab.grab(bbox=(162,650,500,500))
im.show()

ImageGrab.grab_to_file('im.png')

滚动完成后拍摄屏幕截图。

正如我在评论中所建议的,我认为更好/更快的方法是只获取值,而不是拍摄屏幕截图。如果你拍摄一个屏幕截图,有人将不得不手动打开它,然后以其他格式记录屏幕截图中的值,这将是一个漫长而乏味的过程。相反,只需从页面中刮取数据并将其转储为最终所需的格式

例如,如果您只查看HTML中的五星评级栏

<div class="we-star-bar-graph__row">
    <span class="we-star-bar-graph__stars we-star-bar-graph__stars--5"></span>
    <div class="we-star-bar-graph__bar">
        <div class="we-star-bar-graph__bar__foreground-bar" style="width: 76%;"></div>
    </div>
</div>
这应该转储如下值

5-star rating: 76%
4-star rating: 12%
3-star rating: 4%
2-star rating: 1%
1-star rating: 6%

这可能不是你最终想要的格式,但它应该能让你找到正确的方向。

你想要5张开始评论的数量还是%?希望我能同时得到这两张图片。xpath用于%。这些标记没有图像源。您可以使用这些元素周围的坐标拍摄selenium屏幕截图。看看这个解决方案——你并不真的想要一个图像,对吧?您只需要“图像”包含的信息。如果您只解析出实际包含星号值的类名和样式,例如,
we-star-bar-graph_uu-stars--5
为76%,而
we-star-bar-graph_u-stars--4
为12%,您会得到更好的服务(而且会更快)。将所有内容转储到一张工作表中,这比转储大量屏幕截图并手动打开每个截图进行分类、检查,然后记录值要快得多。@JeffC有没有更好的方法来提取“图像”中的内容?因为我的输出包含了很多,非常感谢!你的回答很好地解决了我的问题!我应用了上面的代码,但收到了“TypeError:必须是str,而不是WebElement”。不知道我为什么会出错…谢谢你的更新。但是我得到了一个不同的输出:“五星评级:210.275px四星评级:33.2px三星评级:11.0625px二星评级:2.7625px一星评级:16.6px”顺便说一句,我怎么能看到“通过css\u选择器查找元素”的输出?我想我已经修复了它。。。我本地没有python,所以我从浏览器控制台运行东西,它返回%s。我更新了代码以获得条的全宽,然后进行数学运算以计算百分比。我想我已经拿到了,但你必须测试一下,然后告诉我。
5-star rating: 76%
4-star rating: 12%
3-star rating: 4%
2-star rating: 1%
1-star rating: 6%