python通过url下载文件不可读_python-selenium实现的简易下载器,并常见错误解决
简易下载器的实现
支持代理、失败重试、确保包含指定ID元素(可根据需求自定义修改)
# coding: utf-8
from Utils import logging
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
class HtmlDownloader:
def __init__(self):
self.driver = webdriver.PhantomJS()
def setProxy(self, proxyStr):
# 利用DesiredCapabilities(代理设置)参数值,重新打开一个sessionId
proxy=webdriver.Proxy()
proxy.proxy_type=ProxyType.MANUAL
proxy.http_proxy=proxyStr
# 将代理设置添加到webdriver.DesiredCapabilities.PHANTOMJS中
proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
self.driver.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
def rmProxy(self):
# 还原为系统代理
proxy=webdriver.Proxy()
proxy.proxy_type=ProxyType.DIRECT
proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
browser.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
def download(self, returnType, url, ensureId, proxyStr = None):
if proxyStr:
self.setProxy(proxyStr)
else:
self.rmProxy()
self.driver.get(url)
# special for xxx.com
# your code here
# ensure for some element
try:
WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.ID, ensureId)))
if returnType == "html":
downloadResult = self.driver.page_source
elif returnType == "bs":
downloadResult = bs(self.driver.page_source, 'lxml')
logging("i", "download %s bytes" % len(self.driver.page_source))
return downloadResult
except Exception,e:
logging("e", str(e))
finally:
self.driver.close()
def safeDownload(self, returnType, url, ensureId, proxyStr = None):
downloadResult = None
failTimes = 0
while not downloadResult:
downloadResult = self.download(returnType, url, ensureId, proxyStr)
if not downloadResult:
failTimes += 1
if failTimes == 5:
logging("w", "failed %s times, will abort" % failTimes)
break
logging("w", "failed %s times, will retry" % failTimes)
return downloadResult
元素不可见导致不能操作的错误
# ElementNotVisibleException: Message: {"errorMessage":"Element is not currently visible and may not be manipulated"
# Screenshot: available via screen
首先尝试设定窗口大小
self.driver.set_window_size(1024, 768)
不行的话再尝试滚动页面,如滚动到底部:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
python通过url下载文件不可读_python-selenium实现的简易下载器,并常见错误解决相关推荐
- 小程序配置阿里云OSS下载文件,在请求头里配置生成强制下载链接,(拿到下载链接可以下载文件至本地)
小程序配置阿里云OSS下载文件,在请求头里配置生成强制下载链接,(拿到下载链接可以下载文件至本地)(Win10电脑开发环境)**这里只说明小程序端问题**<菜鸡总结大神勿喷!蟹蟹~> 大体 ...
- ftp服务器上的文件发生错误450,FTP常见错误解决办法
一般来说,只要网站能访问,FTP就应该能连接的,之前好长一段时间一直遇到连接不上香港主机的问题,还以为是宽带出口线路不好,原来是自己学识浅薄,在同事的指点下才明白所以然,下面总结一下FTP连接中的常见 ...
- python下载文件加上日期_Python实现给下载文件显示进度条和下载时间代码
本篇文章小编给大家分享一下Python实现给下载文件显示进度条和下载时间代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 该模块调用了三个库: 1. ...
- python urllib下载文件怎么停止_python下载文件的三种方法
Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...
- python下载文件暂停恢复_python下载文件记录黑名单的实现代码
具体代码如下所示: #!/usr/bin/python # -*- coding: GBK -*- # -*- coding: UTF-8 -*- from ftplib import FTP imp ...
- python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作
1.安装及下载 selenium安装: pip install selenium 即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...
- python下载文件并改名_python – 重命名下载的文件selenium
我正在使用selenium从此页面自动下载csv格式的文件: 这是我正在使用的代码: profile = webdriver.FirefoxProfile() profile.set_preferen ...
- python下载文件并改名_Python 实现自动重命名网易云音乐下载文件
网易云音乐 PC 版的下载文件都是按照 歌手名 - 歌曲名.mp3 的格式命名的,然而我比较喜欢直接以歌曲名作为文件名.手动一个一个文件改肯定是不行的,太 tm 蠢了(笑 以前我是用 shell 写的 ...
- python怎样判断一个文件是否存在_python如何判断一个文件是否存在
python如何判断一个文件是否存在 发布时间:2020-09-23 11:38:42 来源:亿速云 阅读:82 作者:Leah python如何判断一个文件是否存在?针对这个问题,这篇文章详细介绍了 ...
最新文章
- 2020年行政区划代码_2020年南宁市行政区划,了解南宁市有几个区,详细数据
- 为什么a*算法采用哈密尔顿距离作为启发函数比不在位数为启发函数的性能要好?_【论文研读】路径规划中的Hybrid A*算法...
- 微服务很香--麻辣味,但要慢慢消化
- hdu4353 Finding Mine三角形内的点数
- java怎么确定数据在区间内_处理数据时,单元格内内容太多无法计数怎么破?...
- 101次从入门到放弃,终于找到一个数据分析利器!
- ANDROID定义自己的看法——onMeasure,MeasureSpec源代码 过程 思考具体解释
- java求立方体表面积和体积_有关正方体、长方体表面积和体积的计算题
- Win7扫雷的H5完整复刻实现(一) / js扫雷算法的初次鉴定与地图初始化实现
- StataIC——协整检验与误差修正模型
- 荣耀安装google谷歌服务框架_荣耀V20怎么下载安装谷歌服务助手,GMS框架安装教程...
- SDU程序设计思维Week15-作业 字符串
- qq拼音 搜狗拼音的对比
- 自定义SharePoint新网站创建过程(2)
- 无线测温采集设备及无线测温监控系统的选型指导-安科瑞王婧
- When Color Constancy Goes Wrong:Correcting Improperly White-Balanced Images阅读札记
- js实现微信表情发送
- 【情暖寒冬 让爱同行】中创算力开展“寒冬送温暖”公益活动
- Vue项目中created生命周期重复执行,未缓存下来
- ubuntu 下 电驴下载及配置