(相关资料图)
selenium控制文件下载位置我们在自动化下载文件的时候势必存在一种需求: 通过chrome将文件保存到指定位置
1. google窗口实现配置"prefs"将文件下载到指定位置, 并通过判断文件的大小来判断文件是否下载完成
import osimport timefrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import Byoptions = Options()prefs = {"profile.default_content_settings.popups": 0, "download.default_directory": os.getcwd() + "\\download"}options.add_experimental_option("prefs", prefs)web = webdriver.Chrome(options=options)web.get("https://pypi.org/project/selenium/#files")time.sleep(5)web.find_element_by_xpath("//*[@id="files"]/div/div[2]/a[1]").click()# 获取下载文件的路径download_dir = os.getcwd() + "\\download"# 注意需要和 Chrome 浏览器设置的下载路径一致# 文件名file_name = "selenium-4.9.0.tar.gz"download_file_path = os.path.join(download_dir, file_name)# 等待文件下载完成wait = WebDriverWait(web, timeout=30)wait.until(lambda driver: os.path.exists(download_file_path))# 获取文件的初始大小init_size = os.path.getsize(download_file_path)# 等待指定时间,再次检查文件大小是否发生变化time.sleep(2)while True: cur_size = os.path.getsize(download_file_path) if cur_size == init_size: break else: init_size = cur_size time.sleep(2)# 文件大小不再发生变化,认为下载完成web.close()
2. 基于无头浏览器实现当我们需要将selenium部署到centos服务器上运行的时候, 就会存在无法打开google的情况, 此时我们必须要配置无头浏览器, 这时候想下载文件到指定位置就不是刚才配置一下"prefs", 因为我们在无头浏览器中是无法导出下载管理的可视化窗口的, 这意味着"prefs"将没有作用, 所以我们应该怎么做?
基于无头浏览器将文件下载到指定目录: 1. 配置无头浏览器并下载文件到google指定目录(配置options) 2. 通过定时等待判断文件是否下载完成(os模块) 3. 关闭浏览器
下面是代码部分:
import osimport timefrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import By# # 设置 ChromeOptions 配置options = Options()options.add_argument("--no-sandbox")options.add_argument("--disable-dev-shm-usage")options.add_argument("--headless")options.add_argument("blink-settings=imagesEnabled=false")web = webdriver.Chrome(options=options)# 配置浏览器web.command_executor._commands["send_command"] = ("POST", "/session/$sessionId/chromium/send_command")params = {"cmd": "Page.setDownloadBehavior", "params": {"behavior": "allow", "downloadPath": r"%s" % os.path.join(os.getcwd(), "download")}}web.execute("send_command", params=params)web.get("https://pypi.org/project/selenium/#files")web.find_element(By.XPATH, "//*[@id="files"]/div/div[2]/a[1]").click()# 等待下载完成# 通过文件大小变化(在上面)或者定时等待的方式均可判断# 这里用定时等待的方式download_file = os.path.join("C://Users//86183//Downloads", "selenium-4.9.0.tar.gz")while not os.path.exists(download_file): time.sleep(2)# # 移动文件到指定的目录# destination = os.path.join(os.getcwd(), "download")# shutil.move(download_file, destination)# 关闭浏览器web.quit()
上一篇: 伊朗外交部发言人:伊朗沙特互开使领馆进入最后准备阶段
下一篇: 最后一页
X 关闭
X 关闭
九江柴桑区:2023领春联•赏非遗之新春嘉年华
当地时间18日下午,瑞典方面发布了第一张水下照片。调查人员表示在北溪1号管道上发现了巨大且扭曲的裂缝。在此之前,只有海面上的气泡表明天然
iOS16未来新功能早在2022年的开发者大会上,苹果预览iOS16系统之时就表示了会有大量新功能加入,但直至现在的iOS16 2大版本,依然还有不少新功
今日仅6个行业获主力资金净流入,7股尾盘净流入资金超5000万元。今日沪深两市主力资金净流出93 3亿元,其中创业板净流出7 4亿元,沪深300成份
北京时间1月10日上午,“JPMorganWeek:2023中国之夜 国际生物医药创新项目路演”在美国旧金山、中国同时拉开序幕。活动中,大兴机场临空区在
与一般的侦探之间,安乐椅神探无须奔波劳碌,只需坐在舒适的安乐椅,听着、看着命案的线索,就能凭借著推理,指出真凶。角落里的
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
1月9日储能板块较上一交易日上涨0 35%,国能日新领涨。当日上证指数报收于3176 08,上涨0 58%。深证成指报收于11450 15,上涨0 72%。储能板块
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
12至15日全省有雨雪大风和强降温天气,需关注雨雪和道路结冰影响据最新气象资料监测分析,预计12至15日,受西南暖湿气流和冷空气共同影响,河