Selenium Webdriver保存损坏的jpeg

时间:2018-08-09 12:37:33

标签: python-3.x selenium-chromedriver

下面是一个脚本,该脚本打开URL,将图像另存为JPEG文件,还另存一些html属性(即登录号)作为文件名。该脚本会运行,但会保存损坏的图像;大小= 210字节,无预览。当我尝试打开它们时,错误消息提示文件已损坏。

我保存图像而不是直接提出请求的原因是为了避开站点的安全措施,它似乎不允许网页抓取。在下面的Windows上测试脚本的我的同事在成功下载图像之前收到了机械手检查请求(在循环开始时仅一次)。我没有从网站上获得此支票,所以我认为我的脚本实际上是在拉动机械手支票而不是网页,因为它不允许我手动绕过支票。感谢您提供帮助解决此问题,也许在脚本打开第一个URL时强制机器人检查。

依赖项
我在MacOS上使用Python 3.6。如果有人为我进行测试,也正在使用Mac,并且是第一次使用Selenium,请注意,在访问任何内容之前,首先需要执行一个名为“ Install Certificates.command”的文件。否则,它将引发“ Certificate_Verify_Failed”错误。易于在Finder中搜索。

下载Selenium ChromeDriver,方法如下:https://chromedriver.storage.googleapis.com/index.html?path=2.41/

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import urllib
import time

urls = ['https://www.metmuseum.org/art/collection/search/483452',
        'https://www.metmuseum.org/art/collection/search/460833',
        'https://www.metmuseum.org/art/collection/search/551844']

#Set up Selenium Webdriver
options = webdriver.ChromeOptions()
#options.add_argument('--ignore-certificate-errors')
options.add_argument("--test-type")
driver = webdriver.Chrome(executable_path="/Users/user/Desktop/chromedriver", chrome_options=options)


for link in urls:
    #Load page and pull HTML File

    driver.get(link)
    time.sleep(2)
    soup = BeautifulSoup(driver.page_source, 'lxml')

    #Find details (e.g. Accession Number)
    details = soup.find_all('dl', attrs={'class':'artwork__tombstone--row'})
    for d in details:
        if 'Accession Number' in d.find('dt').text:
            acc_no = d.find('dd').text

    pic_link = soup.find('img', attrs={'id':'artwork__image', 'class':'artwork__image'})['src']
    urllib.request.urlretrieve(pic_link, '/Users/user/Desktop/images/{}.jpg'.format(acc_no))

    time.sleep(2)

0 个答案:

没有答案