# Free access to 200+ digital textbooks for students (Primary, Secondary, A-Levels etc) @ Oxford University

**URL:** <https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311>\
**Category:** Give-Away and Freebies\
**Tags:** learning, ebook\
**Created:** [September 14, 2020, 6:55pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311 "2020-09-14T18:55:50Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ARM\_Geometry\_Dash](https://onehack.st/user_avatar/onehack.st/arm_geometry_dash/32/27760_2.png) [@ARM\_Geometry\_Dash](https://onehack.st/u/ARM_Geometry_Dash)\
**Post date:** [September 14, 2020, 6:55pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/1 "2020-09-14T18:55:50Z")

</div>

[https://global.oup.com/education/support-learning-anywhere/key-resources-online/?region=international](https://global.oup.com/education/support-learning-anywhere/key-resources-online/?region=international)

Free access to digital textbooks (until 30th September) for UK students.

Maybe useful for someone to data hoard and share before the free access ends if you can find a way to rip.

You can download book by book with this website … Need to paste the link of the book there and download all pages to pdf.

[https://calameodownload.com/](https://calameodownload.com/)

---

<div class="post-metadata">

**Author:** ![vishwas\_bhati](https://onehack.st/user_avatar/onehack.st/vishwas_bhati/32/49314_2.png) [@vishwas\_bhati](https://onehack.st/u/vishwas_bhati)\
**Post date:** [September 14, 2020, 7:25pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/2 "2020-09-14T19:25:29Z")

</div>

Thank You very much sir for letting us know and sharing this 🙂

---

<div class="post-metadata">

**Author:** ![mtafsiri](https://onehack.st/user_avatar/onehack.st/mtafsiri/32/24109_2.png) [@mtafsiri](https://onehack.st/u/mtafsiri)\
**Post date:** [September 14, 2020, 8:00pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/3 "2020-09-14T20:00:16Z")

</div>

how does pasting the url work i have tried a couple to no avail

---

<div class="post-metadata">

**Author:** ![jack\_daniel](https://onehack.st/user_avatar/onehack.st/jack_daniel/32/17364_2.png) [@jack\_daniel](https://onehack.st/u/jack_daniel)\
**Post date:** [September 14, 2020, 8:39pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/4 "2020-09-14T20:39:33Z")

</div>

did you check the site it has instruction photos.

![](https://calameodownload.com/img/calameo/get-calameo-document-url-01.jpg)  
or  
 ![](https://calameodownload.com/img/calameo/get-calameo-document-url-02.jpg)

---

<div class="post-metadata">

**Author:** ![Kingz-Man](https://onehack.st/user_avatar/onehack.st/kingz-man/32/25178_2.png) [@Kingz-Man](https://onehack.st/u/Kingz-Man)\
**Post date:** [September 15, 2020, 6:37am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/5 "2020-09-15T06:37:26Z")

</div>

**Thankyou  
Great Job**

---

<div class="post-metadata">

**Author:** ![oneplus](https://onehack.st/user_avatar/onehack.st/oneplus/32/50181_2.png) [@oneplus](https://onehack.st/u/oneplus)\
**Post date:** [September 15, 2020, 6:38am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/6 "2020-09-15T06:38:21Z")

</div>

all links for direct dl  
[https://pastebin.com/LdTBLdar](https://pastebin.com/LdTBLdar)

---

<div class="post-metadata">

**Author:** ![mshordja](https://onehack.st/user_avatar/onehack.st/mshordja/32/50350_2.png) [@mshordja](https://onehack.st/u/mshordja)\
**Post date:** [September 15, 2020, 11:35am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/7 "2020-09-15T11:35:47Z")

</div>

hello,  
i was looking for “matrix computing for 11-14 student book 3”, but with no luck ☹

---

<div class="post-metadata">

**Author:** ![WarzoneFrozen](https://onehack.st/user_avatar/onehack.st/warzonefrozen/32/37494_2.png) [@WarzoneFrozen](https://onehack.st/u/WarzoneFrozen)\
**Post date:** [September 16, 2020, 1:41am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/8 "2020-09-16T01:41:57Z")

</div>

> [@ARM\_Geometry\_Dash](#):
>
> [CalameoDownload.com](http://CalameoDownload.com)

Unable to download from CalameoDownload.com.I think they banned. 😱

---

<div class="post-metadata">

**Author:** ![atlonxp](https://onehack.st/user_avatar/onehack.st/atlonxp/32/38549_2.png) [@atlonxp](https://onehack.st/u/atlonxp)\
**Post date:** [September 16, 2020, 3:33am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/9 "2020-09-16T03:33:47Z")

</div>

With simple reverse engineering, here is pseudocode

1. Use selenium or any framework you liked

2. Go to the book url

3. Detect how many pages for the book

4. Here is a structured URL for each page

5. Use For Loop from 1 to the last page detected in Step 3

6. Create PDF from `svgz` files collected from Step 5.

---

<div class="post-metadata">

**Author:** ![atlonxp](https://onehack.st/user_avatar/onehack.st/atlonxp/32/38549_2.png) [@atlonxp](https://onehack.st/u/atlonxp)\
**Post date:** [September 16, 2020, 5:29am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/10 "2020-09-16T05:29:33Z")

</div>

```auto
# ------------------------------------------------
# Calameo Downloader -
# Copyright (c) 2020. atlonxp -
# https://github.com/atlonxp. -
# ------------------------------------------------

import time
from pathlib import Path

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

# Base directory is where you put this source code in
BASE_DIR = Path( __file__ ).parent.absolute()

# Put "chromedriver" into sub-folder "drivers"
driver = webdriver.Chrome(f"{BASE_DIR}/drivers/chromedriver")
driver.implicitly_wait(5)

# This url might be changed in the future if it cannot download any SVG files
calameoassets_url = 'https://p.calameoassets.com/'
header_curl = {
    'user-agent': driver.execute_script("return navigator.userAgent;")
}

# You can change this URL to other Calameo URL.
driver.get('https://global.oup.com/education/support-learning-anywhere/key-resources-online/?region=uk')
book_tables = driver.find_elements(By.XPATH, '//div[@class="content_block full_width"]/div/table/tbody')

print('''
********************************
Collect list of books
********************************''')
books_list = []
for table in book_tables:
    tr = table.find_elements(By.TAG_NAME, 'tr')
    books = tr[-1].find_elements(By.TAG_NAME, 'a')
    for book in books:
        url = book.get_attribute('href')
        name = book.text
        books_list.append({'name': name, 'url': url})
        print(f'> {name} - {url}')

print('''
********************************
Download all books
********************************''')
for book in books_list:
    print(f'> Go to {book["url"]}')
    driver.get(book['url'])
    iframe = driver.find_element_by_tag_name("iframe")
    driver.switch_to.frame(iframe)
    
    imgs = []
    counter = 0
    while len(imgs) == 0:
        imgs = driver.find_elements(By.XPATH, '//img[@class="page"]')
        time.sleep(1)
        counter += 1
        if counter > 20:
            raise Exception("Book ID is unreachable")

    imgs = driver.find_elements(By.XPATH, '//img[@class="page"]')
    book_id = imgs[0].get_attribute('src').replace(calameoassets_url, '').split('/')[0]
    print(f'\t* Book ID: {book_id}')

    Path(f'{BASE_DIR}/books/{book["name"]}').mkdir(parents=True, exist_ok=True)
    for page in range(1, 9999):
        filename = f'p{page}.svgz'
        url = f'{calameoassets_url}{book_id}/{filename}'
        response = requests.get(url, allow_redirects=True, headers=header_curl)
        if response.status_code != 200:
            break
        print(f'\t* {url}', end='\t...\t')
        open(f'{BASE_DIR}/books/{book["name"]}/{filename}', 'wb').write(response.content)
        print('saved')
driver.close()
driver.quit()

```

## Calameoassets Downloader

This source code is a SVG downloader for all books on `https://global.oup.com/education/support-learning-anywhere/key-resources-online/?region=uk`

### Required Dependencies

1. Python
2. Selenium

> pip install selenium

3. Selenium Chrome WebDriver
4. Requests

> pip install requests

Feel free to you.  
Enjoy!

**atlonxp**

All future updates will be available at my repository:  
[https://github.com/atlonxp/Calameo-SVG-Downloader](https://github.com/atlonxp/Calameo-SVG-Downloader)

---

<div class="post-metadata">

**Author:** ![WarzoneFrozen](https://onehack.st/user_avatar/onehack.st/warzonefrozen/32/37494_2.png) [@WarzoneFrozen](https://onehack.st/u/WarzoneFrozen)\
**Post date:** [September 16, 2020, 8:21am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/11 "2020-09-16T08:21:52Z")

</div>

I got this error

 ![image](https://onehack.st/uploads/default/original/3X/5/4/54ba5f6ad6f4a289e4d7ebe9b6451eee65b31d92.png)

---

<div class="post-metadata">

**Author:** ![atlonxp](https://onehack.st/user_avatar/onehack.st/atlonxp/32/38549_2.png) [@atlonxp](https://onehack.st/u/atlonxp)\
**Post date:** [September 16, 2020, 11:21am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/12 "2020-09-16T11:21:58Z")

</div>

change `time.sleep(5)` to `time.sleep(10)`

You may change to 15

---

<div class="post-metadata">

**Author:** ![Adnan\_Catper](https://onehack.st/user_avatar/onehack.st/adnan_catper/32/18110_2.png) [@Adnan\_Catper](https://onehack.st/u/Adnan_Catper)\
**Post date:** [September 16, 2020, 12:49pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/13 "2020-09-16T12:49:51Z")

</div>

im running this on colab, its giving me error when executing !python calameo-downloader.py.  
btw someone download all books and share gdrive link here

---

<div class="post-metadata">

**Author:** ![atlonxp](https://onehack.st/user_avatar/onehack.st/atlonxp/32/38549_2.png) [@atlonxp](https://onehack.st/u/atlonxp)\
**Post date:** [September 16, 2020, 12:54pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/14 "2020-09-16T12:54:16Z")

</div>

You can’t run this onto Colab. This script uses Selenium.

The reason is that I grab a book\_id from the URL generated by javascript.

---

<div class="post-metadata">

**Author:** ![Adnan\_Catper](https://onehack.st/user_avatar/onehack.st/adnan_catper/32/18110_2.png) [@Adnan\_Catper](https://onehack.st/u/Adnan_Catper)\
**Post date:** [September 16, 2020, 4:59pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/15 "2020-09-16T16:59:02Z")

</div>

i see..  
btw it would be nice if you or someone download all the books and share gdrive link here

---

<div class="post-metadata">

**Author:** ![WarzoneFrozen](https://onehack.st/user_avatar/onehack.st/warzonefrozen/32/37494_2.png) [@WarzoneFrozen](https://onehack.st/u/WarzoneFrozen)\
**Post date:** [September 17, 2020, 2:06am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/17 "2020-09-17T02:06:51Z")

</div>

It’s working perfectly 😀. Thank you

---

<div class="post-metadata">

**Author:** ![kumar\_sahu](https://onehack.st/user_avatar/onehack.st/kumar_sahu/32/15838_2.png) [@kumar\_sahu](https://onehack.st/u/kumar_sahu)\
**Post date:** [September 17, 2020, 2:44am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/18 "2020-09-17T02:44:27Z")

</div>

```
import requests
i = 0
first_part = "https://p.calameoassets.com/200330160133-befc931cf81b8df61613115b0a327a50/p"
for j in range(1,500):
  i = i + 1
  url = (first_part + str(i) + ".svgz")
  response = requests.get(url, allow_redirects=True)
  page = (str('{0:03}'.format(i))+".svg")
  print(page)
  file = open(page, "wb")
  file.write(response.content)
  file.close()

```

this is a dumb code i write for downloading a particular book.  
put this into a file and name it something.py save it .  
you just need to go to the book you want to download and F12 on it then click the select element button on the console than click any page of the book . copy the url then put the first part which is “[https://p.calameoassets.com/200330160133-befc931cf81b8df61613115b0a327a50/p](https://p.calameoassets.com/200330160133-befc931cf81b8df61613115b0a327a50/p)” this much in the first\_part variable than change the range of the for loop according to the pages. this will download the book you wanted in .svg format which you can open on the chrome by dragging any svg file to see.

the main issue here is converting these svg files to pdf. i tried everything inkscape , codes but the problem is with fonts. so i want to know if any one have the solution for converting these svgs to pdf properly. thank you very much everyone for sharing your knowledge.

---

<div class="post-metadata">

**Author:** ![WarzoneFrozen](https://onehack.st/user_avatar/onehack.st/warzonefrozen/32/37494_2.png) [@WarzoneFrozen](https://onehack.st/u/WarzoneFrozen)\
**Post date:** [September 17, 2020, 3:26am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/19 "2020-09-17T03:26:18Z")

</div>

Just print(ctrl + p) in chrome.then save as PDF.😁

---

<div class="post-metadata">

**Author:** ![kumar\_sahu](https://onehack.st/user_avatar/onehack.st/kumar_sahu/32/15838_2.png) [@kumar\_sahu](https://onehack.st/u/kumar_sahu)\
**Post date:** [September 17, 2020, 3:46am UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/20 "2020-09-17T03:46:37Z")

</div>

can you do that to every svg files using selenium or other automation tools.

---

<div class="post-metadata">

**Author:** ![FoodiNinja](https://onehack.st/letter_avatar_proxy/v4/letter/f/4da419/32.png) [@FoodiNinja](https://onehack.st/u/FoodiNinja)\
**Post date:** [September 21, 2020, 7:01pm UTC](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311/21 "2020-09-21T19:01:25Z")

</div>

Here is a way to convert to PDF using Python.

> **[svglib](https://pypi.org/project/svglib/)**
>
> A pure-Python library for reading and converting SVG

[Next page](https://onehack.st/t/free-access-to-200-digital-textbooks-for-students-primary-secondary-a-levels-etc-oxford-university/110311.md?page=2)
