python + webdriver

来源:互联网 发布:知乎二战德国石油 编辑:程序博客网 时间:2024/06/06 02:01

python + webdriver


在使用webdriver 之前,我们首先搞清楚另一个问题,selenium是什么?

**Selenium是一个用于Web应用程序测试的工具。
Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
支持的浏览器包括IE,Mozilla和Firefox等。**


本次我们就是selenium来模拟登录

1.安装环境,如何安装 selenium

so easy
具体跟以往装的一些python依赖库什么的很相似

我们打开命令窗口(当然你是安装过settools的,不懂的自己百度, 我们打开python安装目录 shift+鼠标右键 命令窗口)

#cmd下 运行该命令.pip install selenium 

如果已经安装需要查看版本 python 回车
import selenium
help(selenium)

我装的是selenium 3.4.3版本的

这里写图片描述


2.webdriver 的使用,webdriver使用很简单

一般用这个 就可以直接调用

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

到了这里你是不是觉得很简单,如果你用的是火狐 或者 谷歌老旧 版本,你可能运行不会报错
如果是新版本恭喜入坑

接下来我们先解决 webdriver.Firefox() 报错问题

我们需要下载一个驱动,火狐有狐火的驱动,谷歌的驱动,百度下都有

我们以火狐为例,首先下载驱动

[火狐驱动下载连接]:(http://download.csdn.net/detail/eb_num/9901579)

下载完毕后,我们将放在python安装的目录下,如图所示
这里写图片描述
在环境变量中配置path 添加本地的 火狐浏览器安装目录
这里写图片描述
这里写图片描述
如果是谷歌自己百度下载一个驱动,跟火狐一样,放在python目录下就OK 了


下来放 大招,看下具体代码:

我具体取的是这个页面.
这里写图片描述

#学信网信息爬取import  bottleimport pymysqlfrom bottle import route, runfrom selenium import webdriverimport time#数据库连接def con_mysql(sql):    try:        # 获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库        conn = pymysql.connect(host='localhost', user='root', passwd='admin', db='test', port=3306, charset='utf8')        cur = conn.cursor()  # 获取一个游标        cur.execute(sql)        cur.close()  # 关闭游标        conn.close()  # 释放数据库资源    except  Exception:        print("发生异常")#页面登录def login(username, password): url = 'https://account.chsi.com.cn/passport/login?service=https://my.chsi.com.cn/archive/j_spring_cas_security_check' driver=webdriver.Firefox() driver.get(url) #模拟登录 driver.find_element_by_id('username').send_keys(username) driver.find_element_by_id('password').send_keys(password) driver.find_element_by_xpath(".//*[@id='fm1']/input[3]").click() #让这家伙睡会  O(∩_∩)O哈哈~  为什么要睡呢,这是为了模拟手动登录,防止被封 time.sleep(3) driver.refresh()#以上模拟登录算是完成了 driver.get("https://my.chsi.com.cn/archive/gdjy/xj/show.action")#具体要爬取那个页面数据就是那个页面的URL time.sleep(2) #sql语句我们 参数传值的形式 sql = '''        INSERT INTO xue_xin_info VALUES((SELECT REPLACE(UUID(),'-','')),         '{u_name}','{sex}','{birthday}','{nation}','{identified}',         '{school_name}','{leve}','{major}','{year_}','{edu_class}',         '{learning}','{branch_institute}','{department}','{class1}','{stu_no}',         '{entrance_school}','{graduate_time}','{state}','{photo_address}',NOW())         ''' uname=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[1]/td[1]").text u_sex=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[1]/td[2]").text#2 u_birthday=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[2]/td[1]").text u_nation=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[2]/td[2]").text #3 u_identified=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[3]/td[1]").text u_school_name=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[3]/td[2]").text #4 u_leve=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[4]/td[1]").text u_major=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[4]/td[2]").text #5 u_year_=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[5]/td[1]").text u_edu_class=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[5]/td[2]").text #6 u_learning=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[6]/td[1]").text u_branch_institute= driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[6]/td[2]").text #7 u_department=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[7]/td[1]").text u_class=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[7]/td[2]").text #8 u_stu_no=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[8]/td[1]").text u_entrance_school=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[8]/td[2]").text #9 u_graduate_time=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[9]/td[1]").text u_state=driver.find_element_by_xpath(".//table[@class='mb-table']/tbody/tr[9]/td[2]").text driver.get_screenshot_as_file(r"D:\pythonPath\\"+username+".jpg") PHaddress ="D:\pythonPath\\"+username+".jpg" inser_sql = sql.format(u_name=uname, sex=u_sex, birthday=u_birthday, nation=u_nation, identified=u_identified,                        school_name=u_school_name, leve=u_leve,major=u_major,year_=u_year_,edu_class=u_edu_class,                        learning=u_learning,branch_institute=u_branch_institute,department=u_department,class1=u_class,                        stu_no=u_stu_no,entrance_school=u_entrance_school,graduate_time=u_graduate_time,state=u_state, photo_address=PHaddress) print(inser_sql) con_mysql(inser_sql) driver.close() #最后我们可以测试一下def main():    username='用户名'    password='密码'    login(username, password)if __name__ =="__main__":    main()

至此 我们使用webdriver 就可以成功实现登录!如果有什么问题,可以留言沟通