网络爬虫——模拟登陆

最近在进行一个自动邮件,从网页上爬取内容,自动完成邮件发送的工作。但是在模拟登陆这方面踩过好多坑,在这记录下,以供参考,不足之处欢迎赐教。

一、环境

采用window中python3.6,selenium,和Chrome版本 74.0.3729.169,值得注意的地方Chrome版本要与chromedriver相对应,否则就会出现错误(很重要,我在这个坑转悠半天)。其他的就很简单了,其原理和浏览器范文网页一样。

先说下怎么使用selenium调用Chrome浏览器吧,首先下载一个chromedriver,(当然暗转selenium包是必须的,就不多说了)确认和你所用的Chrome的版本相同。我这里用的都是 74.0.3729.169。把下载好的chromedrive放到python安装目录中,我用的是anaconda,及直接放在

python 模拟输入网页 python模拟浏览器登录_Chrome


这样就可以用了。

二、知识备用

1、selenium中常用的函数应用

selenium.webdriver支持各种浏览器,包括谷歌、火狐、IE等浏览器,这里主要使用谷歌,不同浏览器操作区别不太。

常用的几个函数包如下

from selenium import webdriver #基础模块应用,用来创建浏览器对象,操作浏览器

from selenium.common.exceptions import TimeoutException #异常处理

from selenium.webdriver.support.ui import WebDriverWait # 设置等待浏览器加载

2、html中的元素定位

上面都准备好了之后,只要熟悉了html的定位就可以很好的进行模拟登陆了。

元素查找分为以下几类:

(1)find_element_by_name

(2)find_element_by_id

(3)find_element_by_xpath

(4)find_element_by_link_text

(5)find_element_by_partial_link_text

(6)find_element_by_tag_name

(7)find_element_by_class_name

(8)find_element_by_css_selector

这里主要就说下,当表签中只有class,而且class是这种形式的

class 的名字是自定义的,内容优势有空格的形式,我们使用常规的定位方法总是出现问题,提示找不到元素。

解决上面的办法就是:

brows.find_element_by_css_selector("[data_test_class=‘kw hg bai’]") #可以解决好多的问题

3、当网页中有iframe中是我们要定位iframe中表签

直接定位肯定会报错的,这是血的教训了,于是转悠的半天找到了一个大神的讲解

就是先进入iframe中,然后在获取表签定位,

iframe = brows.find_elements_by_tag_name(“iframe”)[0] #先找出iframe的位置

brows.switch_to.frame(iframe) #再进入iframe,去寻找表签定位

这样是不是就很简单了

三、案例

from selenium import webdriver
from time import sleep
brows = webdriver.Chrome()
brows.get('http://**********:8082/#/signin')	#这个是网址
sleep(15)
brows.find_element_by_name('username').send_keys('mima')    #找到用户名定位,传入用户名
brows.find_element_by_name('password').send_keys('Kxxg8888')   #找到用密码定位,传入密码
sleep(10)
hg=brows.find_element_by_css_selector('button').click() #登陆
sleep(15)
brows.get('http://118.123.216.130:8082/#/views/3_0-/sheet2?:iid=1')#转入目标页
sleep(15)
iframe = brows.find_elements_by_tag_name("iframe")[0]   #找iframe
brows.switch_to.frame(iframe) #已经进入iframe,找出class
brows.find_element_by_css_selector('.tabToolbarButton.tab-widget.download').click()#点击下载