带Cookies信息操作页面(Selenium)

04-06 阅读 0评论

文章目录

  • 一、Cookie介绍
  • 二、使用Selenium获取Cookies信息(登入)
  • 三、带Cookies操作页面(Selenium)
  • 四、带Cookies操做页面(session)
  • 五、自动登入(验证处理)
    • 1、超级鹰(图片验证码)

      一、Cookie介绍

      通常在发起请求登入之后,再次发起请求又恢复为未登入状态,即第一次请求的登入信息不会保存至第二次请求中,如果要在第二次请求中共使用第一次的登入信息,这里就需要使用到Cookie。Cookie是用来让服务端记录客户端的相关状态。session可以进行请求的发送,如果请求产生了Cookie,则该Cookie会被自动存储在该session中

      带Cookies信息操作页面(Selenium),带Cookies信息操作页面(Selenium),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,比较,第1张
      (图片来源网络,侵删)

      二、使用Selenium获取Cookies信息(登入)

      selenium可以对页面进行自动化操作,在碰到需要登入信息的时候,一般开始自动化时没有登入信息,可以使用selenium模块提前将登入的相关信息打印出来或者使用文件保存起来,在下一次使用的时候,读取使用该信息,加入进去,在selenium对网页发起请求时,就已经包含了账户信息,具体的操作如下

      首先,我们写入一段程序,获取登入信息,这里一般是直接请求到登入界面,使用扫码或某种方式登入,操作完成之后将获取的信息打印出来,或者将信息保存为文件,在下一次使用的时候将读取其文件。这里注意,在打印登入信息之前(Cookies)一定要给定足够的延时,以足够你完成登入操作,如果没有延时或者延时过短,打印信息时可能还是未登入的信息(Cookies)。(很多网站为了安全,获得的Cookies登入信息一般都有一定的时效性,一般不会长期有效

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      import time
      browser = webdriver.Chrome()
      # 需要请求的网址,这里一般可以直接请求登入界面,接着发出get请求
      url = 'https://www.xxx.cn/resources/login.html'
      browser.get(url)
      # 此时,就是看你怎么登入,要么输入信息登入,要么跳转至某界面扫码登入,这个自行解决
      # 我选择扫码登入,此处使用Xpath定位查找点击跳转至扫码登入界面,然后click函数自动点击,就会跳转至Xpath界面,这里直接手动点入跳转也可
      login = browser.find_element(By.XPATH, '//*[@id="toolbar_Div"]/div[2]/div[2]/ul/li[2]/a')
      login.click()
      # 注:此处一定要留够充足的时间,以足够完成登入操作,确保后面获取的Cookies登入信息为登入信息是登入状态的,如果没有下面延时或者延时不充足,可能导致获取的Cookies信息还是未登入的状态,影响后期使用
      time.sleep(10)
      # 获取登入信息(Cookies),将其打印出来,或者保存为文件
      cookies = browser.get_cookies()
      print(cookies)
      

      如果将其界面化,这个可以封装为一个函数,将某个按钮绑定该函数,点击时,即可触发,然后完成操作,将登入信息保存为全局变量,在界面上做其他操作时,可使用该全局变量。

      三、带Cookies操作页面(Selenium)

      这里将上面获取的Cookies信息复制过滤,赋值给下面cookies变量,然后使用add_cookie将其加入,如果操作时切换到了新的窗口,则需要使用switch_to.window切换至新的界面,如果网站随机使用两种方案,可以使用try except使用两种方案进行解析

      import selenium.common.exceptions
      from selenium import webdriver
      from selenium.webdriver.common.by import By
      import time
      # 首先正常创建对象,对某网址发起请求,这里的请求不包含登入信息
      q = webdriver.Chrome()
      q.get('https://www.xxx.cn/index.html')
      time.sleep(1)
      # 这里将上面打印的用户信息(Cookies)复制过来,是一个列的格式,列表里面为字典,使用for循环将cookies一项一项的加入进入
      cookies = []
      for cookie in cookies:
          q.add_cookie(cookie)
      time.sleep(1)
      # 接着对需要请求的网站发起请求,此处的请求已经包含了登入信息
      q.get('https://www.xxx.cn')
      # 接着对该网站操作(如输入、清除、单击等)
      star = q.find_element(By.XPATH, '//*[@id="fromStationText"]')   # 定位输入框(此处为Xpath)
      star.clear()     # 对定位的输入框清除原有内容
      star.send_keys("hello")                                         # 此处对查找到的输入框进行输入hello
      runsta = q.find_element(By.XPATH, '//*[@id="search_one"]')      # 定位按钮(此处为Xpath)
      runsta.click()   # 对定位的按钮进行单击操作
      time.sleep(1)
      # 这里如果跳转弹出了新窗口,需要进行如下操作,切换至当前窗口进行操作,否则将会查找不到元素
      # 如果在原来的窗口跳转至新的网址,则不需要进行如下操作
      currentWin = q.current_window_handle
      handles = q.window_handles
      for i in handles:
          if currentWin == i:
              continue
          else:
              q.switch_to.window(i)
      time.sleep(1)
      # 如果要对网址进行批量操作(如获取网址显示的为列表,获取其信息),可以使用for循环
      # 部分网站会存在两种方案,反复进入网页对元素进行定位,会发现有两种解析格式,这里可以使用try方式
      for i in range(1, 1000, 2):
          # 这里两种不同的解析方案
          try:
              # 方案一
              # 使用XPath定位获取信息并打印
              a = q.find_element(By.XPATH, '/html/body/div[1]/div[9]/div[12]/table/tbody/tr[{}]/td[1]/div/div[1]/div/a'.format(i))
              b = q.find_element(By.XPATH, '/html/body/div[1]/div[9]/div[12]/table/tbody/tr[{}]/td[4]'.format(i))
              print(a.text, b.text)
          except selenium.common.exceptions.NoSuchElementException as e:
              # 方案二
              # 使用XPath定位获取信息并打印
              a = q.find_element(By.XPATH, '/html/body/div[2]/div[8]/div[12]/table/tbody/tr[{}]/td[1]/div/div[1]/div/a'.format(i))
              b = q.find_element(By.XPATH, '/html/body/div[2]/div[8]/div[12]/table/tbody/tr[{}]/td[4]'.format(i))
              print(a.text, b.text)
      

      这里的一系列操作可以封装为函数绑定某个按钮,点击按钮即可触发,cookies使用全局变量,即上面登入时获取的cookies信息

      更多selenium操作详情请看https://blog.csdn.net/weixin_46287157/article/details/129149265

      带Cookies信息操作页面(Selenium),带Cookies信息操作页面(Selenium),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,比较,第2张
      (图片来源网络,侵删)

      四、带Cookies操做页面(session)

      可以使用信息直接使用session登入

      # 登入的URL
      login_url = ''
      # 登入带入的参数,如email为账户,pwd为密码,code为验证码
      # 这种参数具体的得根据具体的网址,一般会通过一些加密,需要反向解析
      data = {
          'email': '',
          'pwd': '',
          'code': ''
      }
      # 抓取登入后的页面,使用session进行POST请求的发送,session中获取了Cookie
      login_page_text = session.post(url=login_url, headers=headers, data=data)
      

      在这也可以使用上面使用selenium获取的Cookies信息,加入到session中,发起请求时已经包含了登入信息

      import requests
      # selenium获取的Cookies复制过来
      cookies = []
      # 创建对象并将Cookies信息加入,具体那些键值对得根据具体网址来
      session = requests.session()
      for cookie in cookies:
          session.cookies.set(cookie['name'], cookie['value'])
      # 发起请求,获取网址文件
      page = session.get(browser.current_url)
      page.encoding = "utf-8"
      html = page.text
      # 保存源码
      with open('./a.html', 'w', encoding='utf-8') as fp:
          fp.write(page.text)
      

      五、自动登入(验证处理)

      上面为了方便,登入操作都是手动,也可以将登入操作自动化,只不过一些大网址会比较麻烦,比如需要图片验证码、手机验证码或其他什么方式验证,有些验证可以借助于第三方工具,比如超级鹰等其他第三方平台

      1、超级鹰(图片验证码)

      超级鹰的基本用法:www.chaojiying.com/about.html

      以登入某网站为例,为保证请求页面的验证码和登入的一样,不能做两次请求,可以借助于截图的方式,将页面进行截图,然后截取验证码部分,利用第三方工具进行处理,获取信息或操作后进行登入操作。这里采用的是截图裁剪方式

      from PIL import Image
      # 请求页面全局截图且保存
      bro.save_screenshot('a.png')
      # 确定验证码坐标(裁剪区域)
      code_img_ele = bro.find_element('') # 图片标签
      location = code_img_ele.location # 验证码左上角坐标 x y
      size = code_img_ele.size # 宽度
      # 左上角和右下角位子
      rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))
      # 图片裁剪
      i = Image.Open('./a.png')
      frame = i.crop(rangle)
      frame.save('code.png')
      
      带Cookies信息操作页面(Selenium),带Cookies信息操作页面(Selenium),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,比较,第3张
      (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]