欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3 + selenium进行模拟登陆

程序员文章站 2022-05-02 10:05:30
...

网络爬虫——模拟登陆

最近在进行一个自动邮件,从网页上爬取内容,自动完成邮件发送的工作。但是在模拟登陆这方面踩过好多坑,在这记录下,以供参考,不足之处欢迎赐教。
一、环境
采用window中python3.6,selenium,和Chrome版本 74.0.3729.169,值得注意的地方Chrome版本要与chromedriver相对应,否则就会出现错误(很重要,我在这个坑转悠半天)。其他的就很简单了,其原理和浏览器范文网页一样。
先说下怎么使用selenium调用Chrome浏览器吧,首先下载一个chromedriver,(当然暗转selenium包是必须的,就不多说了)确认和你所用的Chrome的版本相同。我这里用的都是 74.0.3729.169。把下载好的chromedrive放到python安装目录中,我用的是anaconda,及直接放在python3 + selenium进行模拟登陆
这样就可以用了。
二、知识备用
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
这有一个大神博客讲的比较详细:https://www.cnblogs.com/yoyoketang/p/6123890.html

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


class 的名字是自定义的,内容优势有空格的形式,我们使用常规的定位方法总是出现问题,提示找不到元素。
解决上面的办法就是:
brows.find_element_by_css_selector("[data_test_class=‘kw hg bai’]") #可以解决好多的问题
3、当网页中有iframe中是我们要定位iframe中表签
直接定位肯定会报错的,这是血的教训了,于是转悠的半天找到了一个大神的讲解,可以参考下:
https://www.cnblogs.com/zhongyehai/p/9170366.html
就是先进入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()#点击下载