最近在接手一个网络爬虫的任务,任务要求登录到某管理系统后台,并抓取数据。该后天相比传统系统不同之处在于其后台全部是由js实现响应,因此传统的爬虫技术束手就擒了,本文先介绍基于webdriver的模拟浏览器操作,以及借助phantomjs完成js触发。
直接上代码:
#第一次登录时,需要进行账号密码登录
def login():
driver = webdriver.PhantomJS()
driver.get("此处为登录页面")
# 输入账号密码
driver.find_element_by_name("username").send_keys("C2WOGBEI")
driver.find_element_by_name("password").send_keys("mMkrBkz8Ke1a")
# 模拟点击登录
driver.find_element_by_xpath("//button[@id='button_login']").click()
# 等待3秒
time.sleep(3)
# 生成登录后快照
# driver.save_screenshot("./wjn.png")
html = driver.page_source #获得登录后跳转的页面html
print('登录成功')
# 保存当前登录的cookie
dictCookies = driver.get_cookies()
jsonCookies = json.dumps(dictCookies)
# 登录完成后,将cookie保存到本地文件
with open('./cookies.json', 'w') as f:
f.write(jsonCookies)
return driver
#第二次则直接将保存的cookie添加到driver里实现免密登录
def loginbycookie():
with open('./cookies.json', 'r', encoding='utf-8') as f:
listCookies = json.loads(f.read())
driver = webdriver.PhantomJS()
for cookie in listCookies:
driver.add_cookie({
'domain':'.xxx.com', # 此处为cookie.json文件中的domain
'name': cookie['name'],
'value': cookie['value'],
'path': '/',
'expires': None
})
# 再次访问页面,便可实现免登陆访问
driver.get('该网站的任意一个页面')
print('cookie登录成功')