第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Selenium爬蟲登錄生成Cookie

標(biāo)簽:
Python


Selenium爬虫登录生成Cookie

网站登录,本质上就是登录完成之后服务器给客户端一个凭据,这个凭据可以存在cookie里,也可以存在别的地方,客户端下次请求网页的时候带上这个凭据,服务端就会认为这个客户端是登录过的。所以对于爬虫来说,生成cookies是代理使用成为了一个必须要做的事情。


1、简单示例

安装chrome和对应driver

下载chrome对应版本的chrome deriver

下载chrome https://www.google.com/chrome/

下载对应版本 driver https://chromedriver.chromium.org/downloads

例如:

https://img1.sycdn.imooc.com//5eda11fe0001976006060331.jpg

https://img1.sycdn.imooc.com//5eda120800017e2b05861332.jpg

生成cookies

我们使用chrome driver来进行登录和cookie的生成

import os

import time

import zipfile


from selenium import webdriver

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.ui import WebDriverWait



class GenCookies(object):

    USER_AGENT = open('useragents.txt').readlines()

# 16yun 代理配置

    PROXY_HOST = 't.16yun.cn'  #  proxy or host 亿牛云代理www.16yun.cn

    PROXY_PORT = 31111  # port

    PROXY_USER = 'USERNAME'  # username

    PROXY_PASS = 'PASSWORD'  # password

    

    @classmethod

    def get_chromedriver(cls, use_proxy=False, user_agent=None):

        manifest_json = """

        {

            "version": "1.0.0",

            "manifest_version": 2,

            "name": "Chrome Proxy",

            "permissions": [

                "proxy",

                "tabs",

                "unlimitedStorage",

                "storage",

                "<all_urls>",

                "webRequest",

                "webRequestBlocking"

            ],

            "background": {

                "scripts": ["background.js"]

            },

            "minimum_chrome_version":"22.0.0"

        }

        """


        background_js = """

        var config = {

                mode: "fixed_servers",

                rules: {

                singleProxy: {

                    scheme: "http",

                    host: "%s",

                    port: parseInt(%s)

                },

                bypassList: ["localhost"]

                }

            };


        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});


        function callbackFn(details) {

            return {

                authCredentials: {

                    username: "%s",

                    password: "%s"

                }

            };

        }


        chrome.webRequest.onAuthRequired.addListener(

                    callbackFn,

                    {urls: ["<all_urls>"]},

                    ['blocking']

        );

        """ % (cls.PROXY_HOST, cls.PROXY_PORT, cls.PROXY_USER, cls.PROXY_PASS)

        path = os.path.dirname(os.path.abspath(__file__))

        chrome_options = webdriver.ChromeOptions()

        if use_proxy:

            pluginfile = 'proxy_auth_plugin.zip'


            with zipfile.ZipFile(pluginfile, 'w') as zp:

                zp.writestr("manifest.json", manifest_json)

                zp.writestr("background.js", background_js)

            chrome_options.add_extension(pluginfile)

        if user_agent:

            chrome_options.add_argument('--user-agent=%s' % user_agent)

        driver = webdriver.Chrome(

            os.path.join(path, 'chromedriver'),

            chrome_options=chrome_options)

        return driver


    def __init__(self, username, password):

        self.url = 'https://passport.weibo.cn/signin/login?entry=mweibo&r=https://m.weibo.cn/'

        self.browser = self.get_chromedriver(use_proxy=True, user_agent=self.USER_AGENT)

        self.wait = WebDriverWait(self.browser, 20)

        self.username = username

        self.password = password


    def open(self):

        """

        打开网页输入用户名密码并点击

        :return: None

        """

        self.browser.delete_all_cookies()

        self.browser.get(self.url)

        username = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))

        password = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))

        submit = self.wait.until(EC.element_to_be_clickable((By.ID, 'loginAction')))

        username.send_keys(self.username)

        password.send_keys(self.password)

        time.sleep(1)

        submit.click()


    def password_error(self):

        """

        判断是否密码错误

        :return:

        """

        try:

            return WebDriverWait(self.browser, 5).until(

                EC.text_to_be_present_in_element((By.ID, 'errorMsg'), '用户名或密码错误'))

        except TimeoutException:

            return False


    def get_cookies(self):

        """

        获取Cookies

        :return:

        """

        return self.browser.get_cookies()


    def main(self):

        """

        入口

        :return:

        """

        self.open()

        if self.password_error():

            return {

                'status': 2,

                'content': '用户名或密码错误'

            }

        # 如果不需要验证码直接登录成功


        cookies = self.get_cookies()

        return {

            'status': 1,

            'content': cookies

        }



if __name__ == '__main__':

    result = GenCookies(

        username='180000000',

        password='16yun',

    ).main()

    print(result)


import osimport timeimport zipfilefrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWaitclass GenCookies(object):    USER_AGENT = open('useragents.txt').readlines()    # 16yun 代理配置    PROXY_HOST = 't.16yun.cn'  #  proxy or host 亿牛云代理www.16yun.cn    PROXY_PORT = 31111  # port    PROXY_USER = 'USERNAME'  # username    PROXY_PASS = 'PASSWORD'  # password        @classmethod    def get_chromedriver(cls, use_proxy=False, user_agent=None):        manifest_json = """        {            "version": "1.0.0",            "manifest_version": 2,            "name": "Chrome Proxy",            "permissions": [                "proxy",                "tabs",                "unlimitedStorage",                "storage",                "<all_urls>",                "webRequest",                "webRequestBlocking"            ],            "background": {                "scripts": ["background.js"]            },            "minimum_chrome_version":"22.0.0"        }        """        background_js = """        var config = {                mode: "fixed_servers",                rules: {                singleProxy: {                    scheme: "http",                    host: "%s",                    port: parseInt(%s)                },                bypassList: ["localhost"]                }            };        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});        function callbackFn(details) {            return {                authCredentials: {                    username: "%s",                    password: "%s"                }            };        }        chrome.webRequest.onAuthRequired.addListener(                    callbackFn,                    {urls: ["<all_urls>"]},                    ['blocking']        );        """ % (cls.PROXY_HOST, cls.PROXY_PORT, cls.PROXY_USER, cls.PROXY_PASS)        path = os.path.dirname(os.path.abspath(__file__))        chrome_options = webdriver.ChromeOptions()        if use_proxy:            pluginfile = 'proxy_auth_plugin.zip'            with zipfile.ZipFile(pluginfile, 'w') as zp:                zp.writestr("manifest.json", manifest_json)                zp.writestr("background.js", background_js)            chrome_options.add_extension(pluginfile)        if user_agent:            chrome_options.add_argument('--user-agent=%s' % user_agent)        driver = webdriver.Chrome(            os.path.join(path, 'chromedriver'),            chrome_options=chrome_options)        return driver    def __init__(self, username, password):        self.url = 'https://passport.weibo.cn/signin/login?entry=mweibo&r=https://m.weibo.cn/'        self.browser = self.get_chromedriver(use_proxy=True, user_agent=self.USER_AGENT)        self.wait = WebDriverWait(self.browser, 20)        self.username = username        self.password = password    def open(self):        """        打开网页输入用户名密码并点击        :return: None        """        self.browser.delete_all_cookies()        self.browser.get(self.url)        username = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))        password = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))        submit = self.wait.until(EC.element_to_be_clickable((By.ID, 'loginAction')))        username.send_keys(self.username)        password.send_keys(self.password)        time.sleep(1)        submit.click()    def password_error(self):        """        判断是否密码错误        :return:        """        try:            return WebDriverWait(self.browser, 5).until(                EC.text_to_be_present_in_element((By.ID, 'errorMsg'), '用户名或密码错误'))        except TimeoutException:            return False    def get_cookies(self):        """        获取Cookies        :return:        """        return self.browser.get_cookies()    def main(self):        """        入口        :return:        """        self.open()        if self.password_error():            return {                'status': 2,                'content': '用户名或密码错误'            }        # 如果不需要验证码直接登录成功        cookies = self.get_cookies()        return {            'status': 1,            'content': cookies        }if __name__ == '__main__':    result = GenCookies(        username='180000000',        password='16yun',    ).main()    print(result)



useragents.txt文件里面是随机的ua

Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/40Mozilla/5.0 (Windows NT 6.2; rv:39.0) Gecko/20100101 Firefox/39.0Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; QQBrowser/8.3.4769.400)Mozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0



點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消