基于Selenium的微博登录代码

Selenium是自动化测试的一个库,可以操控浏览器(本文主讲Chrome),实现相应自动化测试的功能。
有时候Python标准库urllib.request或者requests库无法实现相应的登录功能,例如QQ空间的网页登录,如果使用requests登录post的参数太多而且QQ登录加密算法比较难解决,因此查阅大多数资料,现在登录主要是基于Selenium来实现,微博也是同样的道理。当使用其他库无法解决你想要解决的问题时,可以转换一下思路,用Selenium+requests库来实现相应的功能,Selenium解决登录问题,而requests库或者标准库urllib.request库实现爬取数据。缺点是:速度比较慢,但是很好的节约了解决登录问题的时间(例如12306的爬虫登录需要好几层验证才可以真正的登录,等有时间可以分享一下),基于Selenium 登录微博的魔板(登录其他网址效果一样):

    from  time import sleep
    from selenium import webdriver
    driver = webdriver.Chrome(executable_path = '驱动谷歌浏览器的chromedriver.exe')
    driver.get(url = "目标登录url")
    sleep(8)#需要等待一定要注意等待的时间要不然会出现找不到元素
    #sleep(8)用下面的此段代码来替代因为此时间受网络的影响比较大故用下面代码是一种较好的选择
    '''while True:
            try:
                self.driver.find_element_by_xpath('//*[@id="loginname"]').click()
                self.driver.find_element_by_xpath('//*[@id="loginname"]').send_keys('1135428665@qq.com')
                self.driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').click()
                self.driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').send_keys('113542jyk')
            except:
                sleep(1)
                continue
            else:
                break
                '''
    '''获取登陆的xpath或者css通过谷歌浏览器的开发者选项中的元素定位然后copy xpath或者 css'''
    #输入内容前先点击一下账号区
    driver.find_element_by_xpath("//*[@id="loginname"]").click()
    #发送登录账号
    driver.find_element_by_xpath("//*[@id="loginname"]").send_keys("账号")
    #点击密码区
    driver.find_element_by_xpath("//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input").click()
    #发送登录密码
    driver.find_element_by_xpath("//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input").send_keys("密码")
    #如果有验证码请在打开的浏览器内输入并且确定,验证码是一个跳不过去的坎,以后需要多研究研究,到时候写一篇关于12306文章爬虫会将12306验证码的解决方案贴到网上
    #设置循环目的是当登录网址发生跳转则退出循环。
    while 1:
        sleep(1)
        #需要登录一下然后copy一下登录跳转后的网页地址
        if driver.current_url == "https://weibo.com/u/(账号)/home":
            break
    #尝试打印一下登陆后的cookies和源码
    #print(driver.get_cookies())
    #print(driver.page_source)
    #使用requests库加载cookies去访问其他的网址
    session = requests.Session()
    #删除Python的请求头否则可能会被对方服务器识别出来禁止爬取数据。
    session.headers.clear()
    cookies = driver.get_cookies()
    for cookies in cookies:
        session。cookies.set(cookie['name'],cookie['value'])
    content = session.get(url = '目标爬虫网址')





你可能感兴趣的:(基于Selenium的微博登录代码)