美文网首页爬虫相关
python selenium 自动发微博,评论等

python selenium 自动发微博,评论等

作者: Shawn丶 | 来源:发表于2019-12-26 16:10 被阅读0次

    第一次使用selenium,对于很多方法理解也不是很完善,如有建议,咱评论区指正。

    一、编程环境

    编写语言:python
    浏览器:chrome(这边Firefox也可以)

    二、微博自动登录

    因为我是用微博绑定了手机,因此每次登陆都需要发送手机验证码,然后验证。
    这就让自动登录这一块显得十分困难。
    因此,借鉴网上其他人的方法,发现可以通过保存cookies的方式,形成自动登录,不过经过测试,cookies的有效期限最长只有1天的时间,一天之后,就要重新刷新cookies了。
    这也是我这个方法的一个缺点。

    下面讲一下思路
    首先,经过人工的操作,保存登陆微博后的cookies,这边如果想要自己输入账号密码,直接把中间几行注释掉就醒了,我自己是直接定义了userpassword
    然后中间sleep了60秒,用于输入验证码。

     # 保存cookies的文件
           def get_cookies(self,test_url):
              try:
                  file = 'cookies.json'
                  # 打开需要获取cookies的网站
                  driver.implicitly_wait(5)
                  driver.get(test_url)
                  driver.maximize_window()
                  # 网站打开后,在时间内手动执行登录操作
                  time.sleep(random.randint(1, 3))
                  # 自动输入账号密码
                  driver.find_element_by_xpath("//input[@id='loginname']").send_keys(self.user)
                  time.sleep(random.randint(1, 3))
                  driver.find_element_by_xpath("//input[@name='password']").send_keys(self.password)
                  time.sleep(random.randint(1, 3))
                  driver.find_element_by_xpath("//*[@node-type='submitBtn']").click()
                  time.sleep(60)
                  # 登录成功后,获取cookies并保存为json格式
                  cookies = driver.get_cookies()
                  fp = open(file,'w')
                  json.dump(cookies,fp)
                  fp.close()
                  # 关闭浏览器
                  driver.close()
    
    

    这里就是在拥有cookies之后,直接向driver传入cookies就能实现自动登录

          # 向浏览器添加保存的cookies
          def add_cookies(self):
              fp = open(file, 'r')
              cookies = json.load(fp)
              fp.close()
              for cookie in cookies:
                   driver.add_cookie(cookie)
    

    完整过程:

    from selenium import webdriver
    import json
    import time
    import random
    
    class AutoLogin():
           def __init__(self):
              #自行填写自己的微博账号等
              self.user = '******'
              self.password = '********'
    
           # 保存cookies的文件
           def get_cookies(self,test_url):
              try:
                  file = 'cookies.json'
                  # 打开需要获取cookies的网站
                  driver.implicitly_wait(5)
                  driver.get(test_url)
                  driver.maximize_window()
                  # 网站打开后,在时间内手动执行登录操作
                  time.sleep(random.randint(1, 3))
                  # 自动输入账号密码
                  driver.find_element_by_xpath("//input[@id='loginname']").send_keys(self.user)
                  time.sleep(random.randint(1, 3))
                  driver.find_element_by_xpath("//input[@name='password']").send_keys(self.password)
                  time.sleep(random.randint(1, 3))
                  driver.find_element_by_xpath("//*[@node-type='submitBtn']").click()
                  time.sleep(60)
                  # 登录成功后,获取cookies并保存为json格式
                  cookies = driver.get_cookies()
                  fp = open(file,'w')
                  json.dump(cookies,fp)
                  fp.close()
                  # 关闭浏览器
                  driver.close()
    
              except Exception as e:
                   utils.logger2.debug('get cookies error[%s]: %s', e.__traceback__.tb_lineno, e)
                   driver.close()
              time.sleep(random.randint(1, 3))
    
          # 向浏览器添加保存的cookies
          def add_cookies(self):
              fp = open(file, 'r')
              cookies = json.load(fp)
              fp.close()
              for cookie in cookies:
                   driver.add_cookie(cookie)
    
    
           # 打开网址
           def open_url(self,url):
              driver.get(url)
              driver.implicitly_wait(5)
              driver.maximize_window()
              time.sleep(5)
    
    if __name__ == "__main__":
    
         driver = webdriver.Chrome()
         test_url = 'https://weibo.com/'
         obj = AutoComment()
         # 获取登陆cookies
         obj.get_cookies(test_url)
       
         # obj.open_url(test_url)
    
         # 添加cookies后刷新界面,实现免密登录
         # obj.add_cookies()
         # driver.refresh()
    
         time.sleep(3)
    

    相关文章

      网友评论

        本文标题:python selenium 自动发微博,评论等

        本文链接:https://www.haomeiwen.com/subject/qmzkoctx.html