如何使用selenium实现自动抓取网页图片

背景

由于需要从网上爬取一些图片作为素材使用,本来计划的是用爬虫来做,但是由于目标网站有cloudflare安全产品的保护,一直没有找到很好的解决办法,所以绕道采用了selenium这个常用于做Web自动化测试的python工具

目标

某网站自动下载所有Messi的图片

准备工作

  • 操作系统: MacOS
  • 安装selenium
    • pip install selenium
  • 安装chromedriver驱动
    • 官网下载 chrome驱动文件
    • 将chromedriver可执行文件拷贝至目录/usr/local/bin

核心步骤

  • 创建浏览器实例,打开网页链接
  • 通过xpath表达式找到Download按钮的xpath路径
  • 调用click方法模拟点击按钮
  • 在弹窗中使用同样的方法找到Download full resolution image 按钮的xpath路径
  • 再次调用click方法模拟点击按钮
  • 最后图片成功下次,继续下一张图片

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep

def main():
    driver = webdriver.Chrome("/usr/local/bin/chromedriver")
    driver.get("https://wallpaperaccess.com/wolf-iphone")
    elements = driver.find_elements(By.XPATH, "/html/body/div[3]/div[3]/div[1]/div/div/div[2]/a")
    for e in elements:
        e.click()
        download_button = WebDriverWait(driver, timeout=10).until(lambda d: driver.find_element(By.LINK_TEXT, "Download full resolution image"))
        download_button.click()
        sleep(3)
        close_button = driver.find_element(By.XPATH, "/html/body/div[4]/div/div/div/div[1]/div/i")
        close_button.click()
        sleep(3)

Comments