操作方法:Python selenium模拟浏览器操作实战(武汉大学)
优采云 发布时间: 2020-08-31 16:59Python硒模拟浏览器操作实战(武汉大学)
Python硒模拟浏览器操作实战(武汉大学)
1. 项目介绍
因为信息门户网站使用请求发送帖子请求来模拟登录操作很麻烦(我太低,并且信息门户网站的加密算法不了解),所以无法通过它来完成此操作其他方式.
使用硒是一种更好的解决方案(虽然速度很慢,但至少可以使用),模拟浏览器输入帐户密码,然后单击“登录”以登录,然后获取相关的cookie和其他信息以获取随后的结果,等等.
2. 参考代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author : Gary
import time
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
# options.add_experimental_option('excludeSwitches', ['enable-automation'])#提示浏览器不是selenium
chrome_options.add_argument('--headless') # 无头
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox') # 这个配置很重要
chrome_options.add_experimental_option('excludeSwitches',
['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
class Selenium:
def __init__(self):
# self.driver = webdriver.Chrome(options=chrome_options) # 有配置的初始化浏览器
self.driver = webdriver.Chrome() # 不使用有配置的,方便看操作
self.driver.maximize_window() # 窗口最大化
def login(self, username, password):
self.driver.get('http://ehall.whu.edu.cn/appShow?appId=5382714380693158') # 走信息门户认证的教务系统url,不用输入验证码
# 找到输入框并输入账号密码
Username = self.driver.find_element_by_id("username")
Username.send_keys(username)
Password = self.driver.find_element_by_id("password")
Password.send_keys(password)
time.sleep(0.2)
self.driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[5]/button').click() # 登录按钮
try:
# name=self.driver.find_element_by_id("ampHeaderToolUserName").text#获取姓名,内容为空,弃用
name = self.driver.find_element_by_id("nameLable").text # 获取学生姓名
acade = self.driver.find_element_by_id("acade").text # 获取学生院系
# cookies = self.driver.get_cookies()[0]
# print('登录成功 ...')
# self.driver.quit()
# html = self.driver.execute_script("return document.documentElement.outerHTML")
html = self.driver.find_element_by_xpath('//*[@id="system"]').get_attribute('onclick')
# 不要用 driver.page_source,那样得到的页面源码不标准
# print(html)
csrftoken = html.split(",")[0].split('csrftoken=')[-1]
print('登录成功!')
return True, acade, name, self.driver.get_cookies(), csrftoken
except Exception as e:
print(str(e))
try:
msg = self.driver.find_element_by_id("msg").text
except Exception as e:
# time.sleep(5)
# cpatchaError=self.driver.find_element_by_id("cpatchaError").text
print(str(e))
msg = '您尝试的次数过多,请明天再试!或解决方案:通过浏览器成功登录一次信息门户。再重试认证本系统'
# self.driver.quit()
return False, msg
if __name__ == '__main__':
username = 'test' # 你的信息门户账号
password = 'test' # 你的信息门户账号对应的密码
spider = Selenium()
print(spider.login(username=username, password=password)) # 查看登录结果
3. 待办事项或应用程序
成功登录后获得的cookie可以获取您自己的得分信息(GPA的计算)等.
这很简单,您想学习吗?然后加入小组:
1136192749
发布于2020-08-31 13:45最喜欢的爬虫阅读(0)评论(0)编辑