использование селена для загрузки из каталога прямой загрузки на веб-сайте - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть сайт ниже (URL: https://www.legislation.qld.gov.au/subscribers/inforce/current) enter image description here откуда мне нужно автоматизировать загрузку файлов. Мне нужно скачать около 250 файлов. Я использовал urllib для загрузки файлов, но у файлов есть некоторая проблема, которая не позволяет нам продолжить нашу работу.

Но я загрузил дело вручную, щелкнув правой кнопкой мыши и сохранив файл в папке, которая работала в соответствии с нашими требованиями.

Я пытаюсь использовать библиотеку Selenium ActionChains для имитации действия щелчка правой кнопкой мыши и нажатия кнопки «Сохранить ссылки как», но она не работает. Я искал ответы в стеке и ничего не смог найти, но в одном вопросе кто-то ответил, что Selenium не может этого сделать.

Я мог бы использовать селен, чтобы щелкнуть ссылку, но он просто откроет XML в новой вкладке, а не загрузит файл в мой каталог.

Не могли бы вы посоветовать мне, как я могу это сделать с помощью Python?

Пожалуйста, посмотрите коды, которые я пробовал

Использование Urllib

import urllib.request
import csv

URL = 'https://www.legislation.qld.gov.au/subscribers/inforce/current/'

count = 0
with open(r"D:\LEG_DOWNLOAD\urls.csv") as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')

    # Skip the heading line
    readCSV.__next__()

    for row in readCSV:
        LEG = row[0]
        file_url = URL + LEG

        print("downloading -> ",file_url)

        response = urllib.request.urlopen(file_url)
        data = response.read()

        # Write data to file
        filename = LEG
        file_ = open(r"D:\LEG_DOWNLOAD\QLDLEG\XML\NEW/"+filename, 'w')
        file_.write(data.decode('utf-8'))
        file_.close()

        count += 1
        print(filename+" saved.\n")

print(str(count) + " files downloaded")

Использование Selenium

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver import ActionChains
options = webdriver.ChromeOptions()
prefs = {
  "download.default_directory": r"D:\LEG_DOWNLOAD\QLDLEG\XML\NEW",
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True}
options.add_experimental_option('prefs', prefs)
browser = webdriver.Chrome(executable_path=r'D:\CHROME\chromedriver.exe', chrome_options=options)
browser.get('https://www.legislation.qld.gov.au/subscribers/inforce/current')
elems=browser.find_elements_by_xpath("//*[contains(@href,'/subscribers/inforce/current/act-')]")
elemstext=[]
for link in elems:
    elemstext.append(link.text)
for linktext in elemstext:
    action = ActionChains(browser)
    action.move_to_element(browser.find_element_by_link_text(linktext)).context_click().send_keys(Keys.ARROW_DOWN).send_keys(Keys.ARROW_DOWN).send_keys(Keys.RETURN).perform();
    time.sleep(10)
    browser.back()
time.sleep(10)
browser.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...