最新消息:

[初学python][已解决循环问题,代码完美]自动复制起点章节python+Selenium脚本

学习 林夕 59浏览 1评论

用的是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条件下面的第二行是同样的缩进。表示是子语句的一部分。
#循环执行的代码块。

转载请注明:一秒钟的梦 » [初学python][已解决循环问题,代码完美]自动复制起点章节python+Selenium脚本

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 第一次知道Selenium是下面这个帖子,谢谢fqxufo网友的回答。 https://www.hi-pda.com/forum/viewthread.php?tid=2516138 【求助】VBA用Msxml2.XMLHTTP.6.0获取的网页源代码与网页内容不一致 https://www.hi-pda.com/forum/redirect.php?goto=findpost&ptid=2516138&pid=51452224 fqxufo 2# 发表于 2019-4-3 09:34 有的网页元素是js生成的,你直接抓取html是找不到他们的.这样最好要用Selenium这样的自动化测试工具操作浏览器来抓取 https://www.hi-pda.com/forum/redirect.php?goto=findpost&ptid=2516138&pid=51452670 fqxufo 8# 发表于 2019-4-3 10:00 回复 7# yxmr 这个是信息是ajax网络请求之后才拿到的,你查看的html源代码相当于只是个没有内容的空模板.这个需求还是上python加Selenium吧
    林夕2周前 (04-07)回复