selenium下载
我们需要用到selenium作为自动化工具,这里建议使用pycharm作为我们的开发工具,在File->Settings->Project Interpreter中添加selenium package,这样就可以在项目中import selenium了。
如果不使用pycharm,在命令行中输入
pip install selenium
也可以进行安装
chromedriver下载
网上给出了两种方式下载chromedriver:
从淘宝的镜像下载:这里
从官网下载:这里
关于下载哪种版本,我们可以在谷歌浏览器中的设置->关于chrome中找到我们自己浏览器的版本,下载对应的即可
我强烈建议使用第二种方式下载,淘宝的镜像chromedriver版本对应有问题,比如我下载的是84版本的,但是实际使用却发现是74版本的,很坑。。。
代码编写
关于selenium的方法可以参见此篇文章:这里
我使用代码的场景是某评书网的MP3下载。在这个网址中,同一评书的不同回目的html是有一定规律的,可以使用字符串拼接的方式访问。在某一回的html上有一个按钮,点击后可以进入在线试听页面(新页面,独立于上个页面),在这个页面中可以通过操作进行下载。
我在实验中发现,试听页面为了防止爬虫进行了url随机化,每个url都是独立的,不能进行自动化访问,而且下载的话也需要进行右键点击才能进行音频另存为,而这超出了selenium的控制范围,但是将此页面的url批量导入迅雷就可以进行自动下载。所以我决定这样操作:
使用字符串拼接的方式自动访问回目页面,在每个页面上点击相应的按钮进入试听页面,获取试听页面的url,存入文件中,退出试听页面,并重复这一过程。
代码如下:
from selenium import webdriver
import time
def main():
chrome_driver = 'G:\chromedriver.exe' #chromedriver的文件位置
driver = webdriver.Chrome(executable_path = chrome_driver) #生成driver对象
suburl = 'https://www.***.com/down/'
urls = []
'''
自动获取url并存入列表
'''
for i in range(158109,158320):
url = suburl + str(i) + '.html' #进行字符串拼接
driver.get(url)
time.sleep(1)
driver.find_element_by_id("clickina").click() #页面上的元素点击事件
time.sleep(1)
driver.switch_to.window(driver.window_handles[-1]) #将driver定位到当前页面
downurl = driver.current_url #获取url
urls.append(downurl)
driver.close() #关闭试听页面
driver.switch_to.window(driver.window_handles[-1]) #driver重新定位页面
time.sleep(1)
'''
写入文件
'''
filename = 'G:\down.txt'
with open(filename,'w') as file:
for url in urls:
file.write(url)
file.write('\n')
if __name__ == '__main__':
main()
将文件中的字符串复制到迅雷就可以了