最初想分析数据包,用requests加上登录状态的cookies发送请求来实现张大妈的自动签到功能,但怎么也抓不到签到的这个数据包,可能是写进js里了吧,将来再慢慢分析。
正好想学selenium,于是就学用selenium来实现。
环境
win7 + python3.6 + selenium + Chrome
selenium稍许有些大,国内使用官方源速度慢经常失败,建议使用国内镜像
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
除了要安装Chrome,还需对照Chrome版本号下载相应版本的chromedriver
下载地址:http://chromedriver.storage.googleapis.com/index.html
版本号对照:https://sites.google.com/a/chromium.org/chromedriver/downloads
下载解压后得到chromedriver.exe
文件,复制到windows环境变量的path包含的目录内,一般放在python安装目录里的scripts目录。(放置的目录必须包含在path内,否则无法找到运行该driver)
基础功能实现
对于浏览网页的最基本操作,不外乎打开浏览器、打开网站、找到需要的链接按钮等控件、对控件进行如点击拖拽等操作、输入文字,将这些动作与代码对照起来就更容易理解了
手动操作 | 程序操作 | 代码 |
---|---|---|
打开浏览器 | 初始化浏览器 | browser = webdriver.Chrome() |
打开网站 | 浏览器加载网站 | browser.get('http://www.smzdm.com') |
找到按钮 | 定位按钮 | button = browser.find_element_by_class_name('按钮的class') |
点击按钮 | 模拟点击按钮 | button.click() |
找到输入框 | 定位输入框 | input = browser.find_element_by_id('输入框的id') |
输入文字 | 将文字发送至输入框 | input.send_keys('######') |
其中定位方法可根据需要选择class、id、css选择器等等:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
以上这些是选择单个元素,若存在多个符合条件的也只选择第一个元素,若要选择所有符合条件的元素,应使用复数单词elements,如find_elements_by_id
,这样得到的是一个列表,列表里每个元素就是符合条件的元素。
实现代码
from selenium import webdriver