Python + Selenium firefox webdriver - 从网站中提取图像

2023-12-09

我正在尝试使用以下方法从网页中提取图像: Python 2.7 + Selenium(使用 FireFox)+ Beautiful Soup。

该页面是动态加载的,因此,我使用 Selenium 进行屏幕抓取。一切在前端看起来都很棒,但是,当我加载所有图像并查看 HTML 时,我看不到图像的链接。你知道这里会发生什么吗?

Site is https://flipp.com/flyers?postal_code=97035, 然后从那里导航到https://flipp.com/weekly_ad/1550082-big-5-sporting-goods-weekly-ad为了看到第一个每周广告(我的工作代码如下)。

更奇怪的是,我可以看到图像正在检查器窗口中加载......但我仍然无法在 HTML 中看到它们。知道这里发生了什么,以及如何获取更新的 HTML(图像加载后?)

这是我能够从 HTML 中提取的一组图像(通过附加 jpg)。这些仅适用于将鼠标悬停在画布上时的弹出窗口。

enter image description here

我想要得到的实际上是构成实际页面/画布的图像。我可以看到它们通过(使用 Firefox 中的流量选项),但由于某种原因它们没有出现在 HTML 中。知道这是怎么回事吗?

enter image description here

工作代码:

#import packages
from time import gmtime, strftime,sleep, time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
#scraping packages
from bs4 import BeautifulSoup


USAPROXY = "177.84.23.122:3128"
def launch_webdriver(PROXY):
    PROXY = PROXY
    PROXY_HOST = PROXY.rpartition(':')[0]
    PROXY_PORT = PROXY.rpartition(':')[2]
    fp = webdriver.FirefoxProfile()
    # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
    fp.set_preference("network.proxy.type", 1)
    fp.set_preference("network.proxy.http",PROXY_HOST)
    fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
    fp.set_preference("network.proxy.ssl",PROXY_HOST)
    fp.set_preference("network.proxy.ssl_port",int(PROXY_PORT))
    fp.set_preference("general.useragent.override","whater_useragent")    
    fp.update_preferences()
    return webdriver.Firefox(firefox_profile=fp)




def test():
    driver = launch_webdriver(USAPROXY)
    driver.set_page_load_timeout(11)
    driver.get("https://flipp.com/flyers?postal_code=97035")
    sleep(15)
    driver.get("https://flipp.com/weekly_ad/1550082-big-5-sporting-goods-weekly-ad")
    sleep(5)
    my_html = driver.page_source
    soup = BeautifulSoup(my_html,'lxml')
    tags=soup.findAll('img')  #prints only 3 imgs, there should be 100s
    for tag in tags:print tag
    print soup.prettify()
#execute script
test()

看不到更新的原因HTML在你的my_html=driver.page_source是因为page_source抓住了HTML在你的页面之前动态地已加载。尝试以下方法在页面加载后获取 HTML:

my_html = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
# or
my_html = driver.find_element_by_tag_name('html').get_attribute('innerHTML')

EDIT:

好吧,我想我已经找到了你要找的东西。我找到了一种方法来访问network资源并获得表现浏览器正在记录的数据。调用此函数并在加载所需页面后传递驱动程序,它应该以您要查找的格式返回图像:

def getNetworkImages(driver):
    ImageList = []
    Resources = driver.execute_script("return window.performance.getEntriesByType('resource');")
    for resource in Resources:
        if resource['initiatorType'] == 'img': ImageList.append(resource['name'])
    for image in ImageList: print(image)
    return ImageList

注意:这是用 Chrome 测试的64和Chromedriver2.35.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python + Selenium firefox webdriver - 从网站中提取图像 的相关文章

随机推荐

  • BaseX中如何将结果与更新操作一起返回?

    我认识到 insert delete 使用 BaseX 客户端执行的 XQueries 始终返回空字符串 我发现这非常令人困惑或不直观 有没有办法找出查询是否 成功 而无需再次查询数据库 并使用可能有错误的 传递 逻辑 例如 如果我删除了一
  • 是否有通过 DbDataReader 实现 IQueryable 的方法?

    我有很多使用原始 ADO NET 的现有代码 DbConnection DbDataReader 等 我想过渡到使用 LINQ to SQL 来处理新代码 但现在将现有代码和新代码放在一组统一的存储库类后面 我遇到的一个问题是 我希望 Re
  • android studio构建AVD未知错误

    and 我的电脑CPU E3 1231v3 vt已经 而且 我是tiro 我无法解决这个问题 有人能给我一些建议吗 谢谢 我刚刚通过从目录 home android avd 中删除 ini 文件解决了这个问题 这是针对Ubuntu的 在 W
  • ruby 中数组的重复元素

    我找到了很多关于在 ruby 中删除重复项的参考 但我找不到如何创建重复项 如果我有一个像这样的数组 1 2 3 如何将它映射到带有配音项的数组 1 1 2 2 3 3 有方法吗 试试这个 1 2 3 flat map i i i gt 1
  • WCF - 为 oasis-200401-wss-username-token-profile-1.0 创建带有时间戳和密码摘要的 UserNameToken

    目标是通过使用 WCF 连接到需要 UserNameToken ws security 的 Web 服务 如标准 oasis 200401 wss soap message security 1 0 所指定 完整规格可在此处找到http d
  • 使用 JQuery 通过 ajax 动态发送 json 格式的 post 表单数据

    我想知道如何使用 JQuery 通过 ajax 动态发送 json 格式的帖子表单数据 例如 我在 JQ 中编写如下代码 post test php func getNameAndTime function data alert data
  • 使用 .NET (dotnet) 通过 HTTPS 下载文件

    我想使用 VB NET 最好 或 C 通过 HTTPS 下载文件 我有以下代码可以通过纯 HTTP 下载文件 Dim client As WebClient New WebClient Dim wp As WebProxy New WebP
  • 从 ls(pattern="") 创建一个列表 [R]

    The ls pattern 函数对我来说非常有用 因为我的对象列表似乎在不断增长 我很好奇这个功能是否可以更有用 例如 假设我有 4 个对象 a c lt 1 b c lt 2 c c lt 3 d c lt 4 现在我使用有用的ls p
  • 如何从 UIView 创建特定尺寸的图像

    我正在开发 iOS 应用程序 该应用程序应该使用户能够创建 Instagram 故事照片并将其导出到 Instagram 基本上像 Unfold Stellar Chroma Stories 这样的应用程序 我已经准备好了 UI 用户可以从
  • Google 地图错误:未捕获 InvalidValueError:setIcon:不是字符串;并且没有 url 属性;并且没有路径属性

    我今天刚刚开始收到 Google 地图的此错误 未捕获的 InvalidValueError setIcon 不是字符串 并且没有 url 属性 并且没有路径属性 我已经几个月没有更改任何代码了 错误发生在该页面上 http gusmode
  • Indesign CS6 脚本 - 导出图像

    我在 indesign cs6 中编写 js 脚本来导出格式化图像时遇到问题 下面的代码 在本网站上找到并稍作修改 仅打开文档 理想情况下 脚本将循环遍历文档中的所有格式化 裁剪图像 并将它们导出到桌面上的新文件夹中 但使用原始文件名 任何
  • pandoc跳过latex环境

    我主要用 LaTeX 写作 但一些合著者更喜欢 MS Word 为了方便他们的工作 我想将 tex文件 或 pdf to a docx 格式不需要完美 但所有文本 方程 图形等都应该完全可读 我目前正在考虑采取 tex文档 替换所有必要的内
  • 如何通过点击UITextView ios中的返回键来创建新行

    我刚接触 iPhone 我在我的应用程序中使用 XIB 添加了一个 UITextView 现在点击完成键后 它只是放弃键盘 但是 我想通过点击它来创建一个新行 这意味着它应该转到下一段 请帮助我实现我的输出 这是我的代码 void text
  • Service Worker 注册失败。 Chrome 扩展程序

    我不明白如何在 Service Worker 的一部分中从清单 v2 迁移到 v3 发生错误Service worker registration failed manifest json background service worker
  • 制作java应用程序的安装程序

    我已经尝试过这两个设置来制作 java 应用程序的安装程序 Exe4j 创新设置 我已经使用这 2 个设置来制作 Java 应用程序安装程序 但是当我在另一个操作系统 Microsoft 操作系统 Windows 7 或 8 上安装时 它会
  • .NET 中的事件签名——使用强类型“发送者”? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我完全意识到我的提议不遵循 NET 准则 因此仅出于这个原因 这可能是一个糟糕的主意 不过 我想从两个可能的角度来考虑这个问题 1 我是否应该考虑将其用于我自己的开发工作 这是100 用于
  • 函数返回后局部变量仍然存在

    我认为一旦函数返回 其中声明的所有局部变量 除了那些带有static关键字 被垃圾收集 但是当我尝试以下代码时 它仍然在函数返回后打印该值 有人能解释一下为什么吗 int fun main int p p fun printf d p sh
  • 连接到 Azure 应用服务中的应用中的 MySQL 时出现访问被拒绝错误

    我创建了一个Azure App Service并在App中启用了MySql 我能够使用 phpMyAdmin 从门户连接到 MySql 转到应用程序 gt 应用程序中的 MySql gt 单击管理 它使用 phpMyAdmin 打开另一个窗
  • 为什么 double 类型的变量会产生意外的结果?

    我的健全性检查失败了 因为双精度变量不包含预期的结果 这真的很奇怪 double a 1117 54 8561 64 13197 37 double b 22876 55 Console WriteLine 0 1 2 a b a b 给我
  • Python + Selenium firefox webdriver - 从网站中提取图像

    我正在尝试使用以下方法从网页中提取图像 Python 2 7 Selenium 使用 FireFox Beautiful Soup 该页面是动态加载的 因此 我使用 Selenium 进行屏幕抓取 一切在前端看起来都很棒 但是 当我加载所有