python爬虫实战(四):selenium+phantomJS使用

引言

phantomJS是一个没有界面的浏览器;selenium则是一个web测试工具,可以模拟用户操作。
在对phantomJS使用不熟练的时候,可以用firefox和selenium一起使用。

配置

  • phantomJS直接从官网下载二进制包,解压,然后用软链接的方式添加到/usr/bin/
  • 使用firefox必须添加到环境变量,同时还要下载驱动

使用

我也是刚刚开始使用,也不是很熟练。
简单了解可以参考:

实战

登录考研论坛~
这个论坛长期有验证码,而且有时候验证码正确也登陆不进去,所以如果使用phantomJS,然后将验证码截图,从终端输入的话,经常进不去。所以我使用的是firefox,直接在窗口输入验证码输入。

登陆后,可以获取cookie,之后可以直接使用requests,带着cookie一起访问需要登录的网页了~

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
# 利用selenium模拟登录考研论坛

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url_yd = 'https://note.youdao.com/signIn/index.html?&callback=http%3A%2F%2Fnote.youdao.com%2Foldweb' # 旧版界面
url_ky = 'https://i.kaoyan.com/login?url=http://bbs.kaoyan.com/forum.php'

driver = webdriver.Firefox() # 可替为phantomJS
driver.get(url_ky)

assert '考研' in driver.title

elem_usr = driver.find_element_by_name('uname')
elem_pas = driver.find_element_by_name('passwd')
elem_code = driver.find_element_by_name('seccode')

elem_usr.send_keys('379548839@qq.com')
elem_pas.send_keys('xxxxxx') # 保密
# elem_code.screenshot('code.png')

x = input() # 等待手工输入验证码
# 由于验证码有bug,必须多次刷新才能使用,必须手工输入
print('验证码为:', x)
elem_pas.send_keys(Keys.RETURN)


cookie = [item["name"] + "=" + item["value"] for item in driver.get_cookies()]
cookiestr = ';'.join(item for item in cookie)

print(cookiestr)



import requests

url_hm = 'https://i.kaoyan.com/set/profile'
headers = {}
headers['Host'] = 'i.kaoyan.com'
headers['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0'
headers['cookie'] = cookiestr
headers['Referer'] = 'http://bbs.kaoyan.com/forum.php'

resp = requests.get(url_hm, headers=headers)

print(resp.text)