51Testing软件测试论坛

标题: 爬虫遇到了自己打开无关网页的网站 [打印本页]

作者: 测试积点老人    时间: 2021-10-25 10:23
标题: 爬虫遇到了自己打开无关网页的网站
背景 爬取某文库
问题:他自己会在我爬取几个页面之后自动打开一个无关页面,导致程序报错。
代码如下:
  1. from selenium import webdriver
  2. import time
  3. global pages#全局变量。如果可以的话希望能换个地方呆着。全局变量的写法,先后顺序
  4. pages=set()#一万个页面的储存体
  5. driver = webdriver.Chrome()
  6. driver.get('https://snail.baidu.com/ndyanbao/browse/index#/search')
  7. #print(driver.current_url)#打印当前的url
  8. time.sleep(5)
  9. i=0
  10. while i < 1000:
  11.   i=i+1
  12.   elements = driver.find_elements_by_class_name('report-title')  # 第一层的标题的按钮
  13.   for element in elements:
  14.     element.click()#可以先把链接存起来,也可以直接开始:它本身的文本内容以及页面内的其他文章链接
  15.     hand = driver.window_handles  # 获取当前的所有句柄
  16.     driver.switch_to.window(hand[-1])   # 转换窗口至最高的句柄
  17.     dlans = driver.find_elements_by_xpath('//*[@id="view-app"]/div[3]/div/div[3]')#登录观看
  18.     if dlans :#登录按钮存在时
  19.         dlan = dlans[0]
  20.         driver.execute_script("arguments[0].click();", dlan)
  21.         time.sleep(5)
  22.         yhm = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__footerULoginBtn')  # 用户名登录
  23.         yhmd = yhm[0]
  24.         yhmd.click()
  25.         yh = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__userName')  # 用户名
  26.         yh = yh[0]
  27.         yh.send_keys('用户名')
  28.         mm = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__password')  # 密码
  29.         mm = mm[0]
  30.         mm.send_keys('密码')
  31.         dl = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__submit')  # 点击登录按钮
  32.         dl = dl[0]
  33.         dl.click()
  34.         time.sleep(10)
  35.         xt = driver.find_elements_by_class_name('reader-word-layer')  # 爬取文章内容#加入百度文库4的代码
  36.         xt2 = [str(i.text) for i in xt]
  37.         print(''.join(xt2))  # 后期改为TXT。join列表方法
  38.         wz = driver.current_url  # 当前的url
  39.         pages.add(wz)  # 将第一层的10000个页面全部存进pages中,方便后面判断
  40.         time.sleep(5)
  41.         # driver.quit()#如何关闭子页面呢?
  42.         hand = driver.window_handles  # 获取当前的所有句柄
  43.         driver.switch_to.window(hand[0])  # 转换原始页面
  44.     else:#登录按钮不存在
  45.         time.sleep(10)
  46.         print('吾皇万岁万岁万万岁')
  47.         xt = driver.find_elements_by_class_name('reader-word-layer')  # 爬取文章内容#加入百度文库4的代码
  48.         xt2 = [str(i.text) for i in xt]
  49.         print(''.join(xt2))  # 后期改为TXT。join列表方法
  50.         wz = driver.current_url  # 当前的url
  51.         pages.add(wz)  # 将第一层的10000个页面全部存进pages中,方便后面判断
  52.         time.sleep(5)
  53.         hand = driver.window_handles  # 获取当前的所有句柄
  54.         driver.switch_to.window(hand[0])  # 转换原始页面
  55.   nps= driver.find_elements_by_class_name('el-icon.el-icon-arrow-right')  #下一页按钮
  56.   for np in nps:
  57.     np.click()
  58. else:
  59.     for page in pages:#第一层以及后边几层的网址
  60.       driver.get('page')
  61.       qts=driver.find_elements_by_class_name('doc-title')#当前页面中含有的的其他文本的按钮.准备进入第二层
  62.       for qt in qts:#当前页面内可操作的文本标题
  63.         qt.click()#之后要在其他页面上重复操作。进入第二层
  64.         hand = driver.window_handles  # 获取当前的所有句柄
  65.         driver.switch_to.window(hand[1])  # 转换窗口至最高的句柄
  66.         ht = driver.current_url#获得他们的URL
  67.         time.sleep(30)
  68.         LD = driver.find_elements_by_class_name('btn login-btn')  # 登录观看
  69.         if LD :
  70.             ld = LD[0]
  71.             ld.click()
  72.             yhm = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__footerULoginBtn')  # 用户名登录
  73.             yhmd = yhm[0]
  74.             yhmd.click()
  75.             yh = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__userName')  # 用户名
  76.             yh = yh[0]
  77.             yh.send_keys('用户名')
  78.             mm = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__password')  # 密码
  79.             mm = mm[0]
  80.             mm.send_keys('密码')
  81.             dl = driver.find_elements_by_css_selector('#TANGRAM__PSP_11__submit')  # 点击登录按钮
  82.             dl = dl[0]
  83.             dl.click()
  84.             time.sleep(10)
  85.             xt = driver.find_elements_by_class_name('reader-word-layer')  # 爬取文章内容#加入百度文库4的代码
  86.             xt2 = [str(i.text) for i in xt]
  87.             print(''.join(xt2))  # 后期改为TXT。join列表方法
  88.             wz = driver.current_url  # 当前的url
  89.             time.sleep(10)
  90.             pages.add(wz)  # 将第一层的10000个页面全部存进pages中
  91.             time.sleep(5)
  92.             # driver.quit()
  93.             if ht not in pages:
  94.                 pages.add(ht)
  95.             # driver.quit()
  96.         else:
  97.             time.sleep(10)
  98.             xt = driver.find_elements_by_class_name('reader-word-layer')  # 爬取文章内容#加入百度文库4的代码
  99.             xt2 = [str(i.text) for i in xt]
  100.             print(''.join(xt2))  # 后期改为TXT。join列表方法
  101.             wz = driver.current_url  # 当前的url
  102.             time.sleep(10)
  103.             pages.add(wz)  # 将第一层的10000个页面全部存进pages中
  104.             time.sleep(5)
  105.             # driver.quit()
  106.             if ht not in pages:
  107.                 pages.add(ht)
  108.             # driver.quit()

复制代码



作者: 任时光瞅瞅逝去    时间: 2021-10-25 14:55
关闭页面的代码被注释掉了吧 可能。

作者: 海海豚    时间: 2021-10-26 09:25
应该是哪里定位有问题
作者: qqq911    时间: 2021-10-26 10:42
是广告网页么?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2