python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣

前几天写的《Python实例:分析豆瓣影片评论Ver 1.0版本》文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了。忽然想到之前有写过关于关于使用selenium库的webdriver来模拟用户的操作。那今天不妨试试使用selenium来模拟用户使用浏览器登陆豆瓣吧。

首先需要导入的库有

import urllib.request

from selenium import webdriver

from PIL import Image

import re

import time

1

2

3

4

5

importurllib.request

fromseleniumimportwebdriver

fromPILimportImage

importre

importtime

定义登陆账号的url,还有输入账号信息

url = 'http://accounts.douban.com/login'

email = input('E-mail:')

password = input('Password:')

1

2

3

url='http://accounts.douban.com/login'

email=input('E-mail:')

password=input('Password:')

使用无窗口浏览器PhantomJS登陆:

browser = webdriver.PhantomJS()

browser.get(url)

1

2

browser=webdriver.PhantomJS()

browser.get(url)

通过

send_keys() 将账号和密码传入浏览器账号密码输入框:

browser.find_element_by_name('form_email').send_keys(email)

browser.find_element_by_name('form_password').send_keys(password)

1

2

browser.find_element_by_name('form_email').send_keys(email)

browser.find_element_by_name('form_password').send_keys(password)

获取验证码图片保存到本地并自动打开方便查看。需要注意的是,打开图片后,好像需要将图片关闭才能继续执行下一步,这个不知道是什么原因。不过好在,这没什么大碍。

captcha_link = browser.find_element_by_id('captcha_image').get_attribute('src')

urllib.request.urlretrieve(captcha_link,'captcha.jpg')

Image.open('captcha.jpg').show()

1

2

3

captcha_link=browser.find_element_by_id('captcha_image').get_attribute('src')

urllib.request.urlretrieve(captcha_link,'captcha.jpg')

Image.open('captcha.jpg').show()

填写图片验证码,然后将验证码传入:

captcha_code = input('Pls input captcha code:')

browser.find_element_by_id('captcha_field').send_keys(captcha_code)

1

2

captcha_code=input('Pls input captcha code:')

browser.find_element_by_id('captcha_field').send_keys(captcha_code)

模拟用户点击登陆按钮:

browser.find_element_by_name('login').click()

1

browser.find_element_by_name('login').click()

因为登录页登录成功后浏览器会自动跳转到豆瓣首页。所以可以通过这个逻辑判断是否登录成功:

if browser.current_url == 'https://www.douban.com/':

print('login success!')

print('Now jump to %s ...' % browser.current_url)

else:

print('login error!')

quit()

1

2

3

4

5

6

ifbrowser.current_url=='https://www.douban.com/':

print('login success!')

print('Now jump to %s ...'%browser.current_url)

else:

print('login error!')

quit()

以上。模拟登陆的步骤就算是完成了。当然,你也可以在期间

print 一些进度信息,告知用户当前程序执行的进度。

讲真,使用selenium的速度真心不行,如果不是特殊要求,实在是不建议使用这个方式登录。

不过它的好处就是,可以完美的实现用户所有的操作,速度虽然慢,但是数据全,不丢失。

文末,附上完整代码:

#coding:utf-8

import urllib.request

from selenium import webdriver

from PIL import Image

import re

import time

url = 'http://accounts.douban.com/login'

email = input('E-mail:')

password = input('Password:')

browser = webdriver.PhantomJS()

browser.get(url)

#get page source

#page_source = browser.page_source

#send account key

print('writing username and password...')

browser.find_element_by_name('form_email').send_keys(email)

browser.find_element_by_name('form_password').send_keys(password)

#get captcha link and save to local

print('saving captcha image...')

captcha_link = browser.find_element_by_id('captcha_image').get_attribute('src')

urllib.request.urlretrieve(captcha_link,'captcha.jpg')

Image.open('captcha.jpg').show()

captcha_code = input('Pls input captcha code:')

browser.find_element_by_id('captcha_field').send_keys(captcha_code)

print('login...')

browser.find_element_by_name('login').click()

time.sleep(3)

if browser.current_url == 'https://www.douban.com/':

print('login success!')

print('Now jump to %s ...' % browser.current_url)

else:

print('login error!')

quit()

# visit book tag url and get page source

book_tag_url = 'https://book.douban.com/tag/'

browser.get(book_tag_url)

page_source = browser.page_source

reg_tag = r'href=\"/tag/(.*?)\"'

tag_list = re.findall(reg_tag, page_source)

print(tag_list)

browser.quit()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

#coding:utf-8

importurllib.request

fromseleniumimportwebdriver

fromPILimportImage

importre

importtime

url='http://accounts.douban.com/login'

email=input('E-mail:')

password=input('Password:')

browser=webdriver.PhantomJS()

browser.get(url)

#get page source

#page_source = browser.page_source

#send account key

print('writing username and password...')

browser.find_element_by_name('form_email').send_keys(email)

browser.find_element_by_name('form_password').send_keys(password)

#get captcha link and save to local

print('saving captcha image...')

captcha_link=browser.find_element_by_id('captcha_image').get_attribute('src')

urllib.request.urlretrieve(captcha_link,'captcha.jpg')

Image.open('captcha.jpg').show()

captcha_code=input('Pls input captcha code:')

browser.find_element_by_id('captcha_field').send_keys(captcha_code)

print('login...')

browser.find_element_by_name('login').click()

time.sleep(3)

ifbrowser.current_url=='https://www.douban.com/':

print('login success!')

print('Now jump to %s ...'%browser.current_url)

else:

print('login error!')

quit()

# visit book tag url and get page source

book_tag_url='https://book.douban.com/tag/'

browser.get(book_tag_url)

page_source=browser.page_source

reg_tag=r'href=\"/tag/(.*?)\"'

tag_list=re.findall(reg_tag,page_source)

print(tag_list)

browser.quit()

喜欢 (2)赏分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值