用的是python3.7.3 64位安装版,免安装版的zip文件不会用。 win10操作系统。使用
pip install selenium
安装selenium。
下载chromedriver.exe放到\Python37目录下,其实只要放到系统的path目录下都可以,你可以放到system32目录或别的系统能够默认目录,都可以。
然后就可以在命令行下进入交互模式,一边运行命令,一边看结果。
cd AppData\Local\Programs\Python\Python37
把下面的命令一条一条的复制粘贴进去。我测试可以运行。
python的代码在交互模式下,可以一条一条执行,也可以多条执行。
下面是成功的代码,不足之处是循环不受控制,好在起点一本书的最后一章不会再跳转到另一本书去,这样算是把自动循环卡住了,手工结束程序运行吧。反正已经能达到我的目的了,自动复制粘贴能实现。
问:只是循环不受控制。会一直循环下去。谁能教我是怎么回事?
答:循环变量row应该跟while条件下面的第二行是同样的缩进。表示是子语句的一部分。现在整个代码全部正常了。可以正常使用。
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome()
#打开chrome浏览器
driver.get("https://passport.qidian.com/")
#打开网址
#driver.find_element_by_xpath('//*[@id="username"]').clear()
#定位到用户名输入区
#driver.find_element_by_xpath('//*[@id="username"]').send_keys("user")
#输入用户名
#driver.find_element_by_xpath('//*[@id="password"]').clear()
#定位到密码输入区
#driver.find_element_by_xpath('//*[@id="password"]').send_keys("password")
#输入密码
#driver.find_element_by_xpath('//*[@id="j-inputMode"]/div[2]/a').click()
#点击登录按键
sleep(50)
#延时50秒,起点登录有一个滑块要手工点一下。或者我干脆手工登录,就不会在脚本中泄露自己的账号密码。
driver.get("https://read.qidian.com/chapter/i-H2eDTDYsI1/ZjjsOiHZG3Tgn4SMoDUcDQ2")
#打开网址
driver.find_element_by_xpath('//*[@id="j_closeGuide"]').click()
#关闭起点指南弹窗
title = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[1]/h3')
#标题内容
titleinfo = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[1]/div[2]/div[1]')
#章节信息
content = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[2]')
#章节内容
with open('C:\\Users\\luoqkk\\Desktop\\qidian.txt', 'a+',encoding='utf-8') as f:
#打开文件并写入,注意路径要转义,本来是一个斜杠,再加一个斜杠。
print("\r\n\r\n"+(title.text)+"\r\n"+(titleinfo.text)+"\r\n"+(content.text), file=f)
#打开文件并写入,标题前面空两行,章节内容前空一行
#f.write("\r\n\r\n"+(title.text)+"\r\n"+(content.text), file=f)
#print((title.text)+(content.text), file=f)
#print (title.text)
#print (content.text)
#f.write('\r\n'.join(content))
#f.write(content)
#f = open('E:\Desktop\qidian.txt', 'a+')
#f.write(content.text)
#下面这一块代码让它循环执行。
row=1
while row <=5:
for link in driver.find_elements_by_xpath('//*[@id="j_chapterNext"][@href]'):
#找到下一章那个链接
#print (link.get_attribute('href'))
driver.get (link.get_attribute('href'))
#打开下一章链接
#sleep(5)
#延时5秒等待页面加载完成,其实不加延时也是可以的,python是一条一条执行命令的,页面加载完成才会执行下一条命令。
title = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[1]/h3')
#标题内容
titleinfo = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[1]/div[2]/div[1]')
#章节信息
content = driver.find_element_by_xpath('//*[@id="j_chapterBox"]/div/div/div[2]')
#章节内容
with open('C:\\Users\\luoqkk\\Desktop\\qidian.txt', 'a+',encoding='utf-8') as f:
#打开文件并写入,注意路径要转义,本来是一个斜杠,再加一个斜杠。
print("\r\n\r\n"+(title.text)+"\r\n"+(titleinfo.text)+"\r\n"+(content.text), file=f)
#打开文件并写入,标题前面空两行,章节内容前空一行
row += 1
#循环变量row应该跟while条件下面的第二行是同样的缩进。表示是子语句的一部分。
#循环执行的代码块。