Python爬虫经常使用之登陆(二) 浏览器模拟登陆

浏览器模拟登陆的主要技术点在于:python

1.如何使用python的浏览器操做工具seleniumweb

2.简单看一下网页,找到账号密码对应的框框,要知道python开启的浏览器如何定位到这些chrome

1、使用selenium打开网页浏览器

from selenium import webdriver

url = 'https://passport.cnblogs.com/user/signin'

driver = webdriver.Firefox()
driver.get(url)

  以上几句执行即可以打开博客园的登陆界面,开启浏览器可能较慢,耐心等一下.cookie

  之前的selenium能够直接打开firefox,如今的须要安装geckodriver,本身百度下载一个对应本身浏览器的型号的.工具

  chrome一直都须要驱动,使用chrome的须要设置的可能麻烦一点.推荐看一下虫师的相关文章,我的以为讲得不错,百度搜索出来仍是比较靠前的.url

 

2、找到账号密码对应的页面元素spa

  浏览器打开页面,点击f12,按上图步骤,找到了用户名的id"input1",同理找到密码的id,找到后发现是"input2".firefox

 

3、将本身的用户名和密码填入selenium打开的浏览器code

  使用find_element_by_id方法找到元素,再使用send_keys方法传入参数,最后使用click方法点击登陆按钮便可.

 

成品代码有以下几句:

# /usr/bin/python
# encoding: utf-8

import time
from selenium import webdriver


def login(username, password):
    # url = 'https://passport.cnblogs.com/user/signin'  # 使用这个url登陆成功后定位到园子
    url = 'https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F'  # url中指明定位到博客园首页

    driver = webdriver.Firefox()
    driver.get(url)
    # print driver.title
    name_input = driver.find_element_by_id('input1')  # 找到用户名的框框
    pass_input = driver.find_element_by_id('input2')  # 找到输入密码的框框
    login_button = driver.find_element_by_id('signin')  # 找到登陆按钮

    name_input.clear()
    name_input.send_keys(username)  # 填写用户名
    time.sleep(0.2)
    pass_input.clear()
    pass_input.send_keys(password)  # 填写密码
    time.sleep(0.2)
    login_button.click()            # 点击登陆

    time.sleep(0.2)
    print driver.get_cookies()

    time.sleep(2)
    print driver.title

    driver.close()

if __name__ == "__main__":
    user = "Masako"
    pw = "*****"
    login(user, pw)

使用time模块sleep主要是为了控制操做速度,防止被认为是机器人,比较符合现实的状况应该随机sleep时间.

上述代码执行以后(注意将用户名密码换成本身的),能够看到打开了浏览器,并自动填写了账号密码,自动点击登陆,成功后跳转,而后自动关闭浏览器.

本地能够看到打印了一份cookie和一个标题"博客园 - 开发者的网上家园".

若是登陆失败,打印的标题会是"用户登陆 - 博客园".

若是报错,未打开浏览器,多半是没有安装geckodriver.

上述代码会打开浏览器界面,若不想看到界面,可采用如下手段:

if __name__ == "__main__":

    from pyvirtualdisplay import Display

    display = Display(visible=0, size=(1366, 768))
    display.start()
    user = "Masako"
    pw = "*****"
    login(user, pw)
    display.stop()

在调用浏览器的时候使用Display包裹,并将dispaly设置为不可见(visible=0)

相关文章
相关标签/搜索