У меня есть сайт ниже
(URL: https://www.legislation.qld.gov.au/subscribers/inforce/current)
откуда мне нужно автоматизировать загрузку файлов. Мне нужно скачать около 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()