最近学习了python+selenium 进行元素定位,便练习了爬虫进行抓书。废话也不多说,上代码
from selenium import webdriver
from time import sleep
#_*_ coding:utf-8 _*_
def firefox():
pass
class firefox():
try:
try:
driver=webdriver.Chrome()
#如有侵权,立即删除
driver.get('https://www.23us.so/files/article/html/17/17932/index.html')
#开始,定义开始结束条件
a=driver.find_element_by_xpath('//dd/h1').text
print(a)
#点击第一章
c=driver.find_element_by_xpath('//tbody/tr/td[1]/a').text
print(c)
driver.find_element_by_xpath('//tbody/tr/td[1]/a').click()
kongzhi=1
print("进入成功")
# 创建文件,这将打开一个用于读写(更新)的文件。
file = open('e:/' + a + '.txt', 'w+')
while kongzhi==1:
try:
#查找章节元素
zhangjie=driver.find_element_by_xpath('//dd/h1').text
#写入文件
file.write(zhangjie)
print(zhangjie)
#查找内容元素
neirou=driver.find_element_by_id('contents').text
file.write(neirou)
#点击下一页
driver.find_element_by_xpath('//div/dl/dd/h3/a[3]').click()
# driver.find_element_by_xpath('//div/dl/dd/a[3]').click()
except Exception:
if a == zhangjie:
break
except Exception as err:
print('Exception:' + str(err));
# 关闭写入连接
file.close()
print('结束')
except Exception as err:
print('Exception:' + str(err));
driver.find_element_by_xpath 进行绝对定位,按照元素的绝对路径。通过层级关系的绝对路径来查找路径,及//相对路径+标签,相对方便,但缺点是路径太长,并且如果页面有变动维护困难
driver.find_element_by_id根据标签id进行定位,但对于没有id的则无法定位
driver.find_element_by_name通过name属性定位,但对于没有name的则无法定位
driver.find_element_by_class_name通过class属性定位,但对于没有class的则无法定位
driver.find_element_by_tag_name通过tag属性定位,因为前端页面会有大量的div,input, a标签。tag 所以很难通过tag name 去区分不同的元素
driver.find_element_by_link_text通过link定位,link定位专门定位文本链接,及文本所在的标签
driver.find_element_by_partial_link_text通过partial link属性定位,partial link定位是对link定位的一种补充有些文本链接会比较长
driver.find_element_by_css_selector 通过css定位,通过css选择器定位元素 .class #id *所有元素 element p定位所有的元素 element > element通过父子关系定位
例如:
#通过id定位元素
# driver.find_element_by_css_selector("#su").click()
#通过class定位元素
# driver.find_element_by_css_selector(".s_btn").click()
#通过父子关系定位元素
# driver.find_element_by_css_selector("span>input").click()
#组合定位
driver.find_element_by_css_selector("form.fm>span>input#su").click()
通过By元素定位
例如:
# 用By元素定位
# driver.find_element(By.ID,"su").click()
# driver.find_element(By.CLASS_NAME,"s_btn").click()
# driver.find_element_by_id("su").click()
#前提是要导入下面的jar包
#from selenium.webdriver.common.by import By
好了,我们下期再见。