新人培训听说有人做了自动签到的脚本,我对其中最困惑的是定时任务的开启,不过既然有了想法就要做起来,先完成手动签到再说!初步打算用python调用url,然后用c做个定时任务。
配置环境及必要库
受单位限制,电脑都不能上网,只能选择集成包去安装,这样可以少下一些库。python官网下载64位即可,安装很顺利。python自己的库分为标准库和第三方库,一般使用第三方库需要安装,这里记录一下离线安装方式。【无网状态下,安装python库】首先需要去外网搞到python库的安装包python库下载。将下载的安装包导入电脑。
下载后解压到当前路径, cmd定位到安装包路径,使用命令 python setup.py install 命令安装。
调用url,登录并签到
# -*- coding:utf-8 -*-
import json
import urllib.request
import datetime
import time
from selenium import webdriver
from datetime import datetime
from time import sleep
# 模拟浏览器打开网站
browser = webdriver.Chrome()
browser.get('网站地址')
# 将窗口最大化
browser.maximize_window()
# 根据路径找到按钮,并模拟进行点击
browser.find_element_by_xpath('//*[@id="login_div"]').click()
# 延时2秒,以便网页加载所有元素,避免之后找不到对应的元素
time.sleep(2)
# 这里是找到输入框,发送要输入的用户名和密码,模拟登陆
browser.find_element_by_xpath('//*[@id="username"]').send_keys("Spring")
browser.find_element_by_xpath('//*[@id="pwd"]').send_keys("123456")
# 在输入用户名和密码之后,点击登陆按钮
browser.find_element_by_xpath(''//*[@id="denglv"]'').click()
time.sleep(2)
# 点击登陆后的页面中的签到,跳转到签到页面
browser.find_element_by_id('//*[@id="denglv2"]').click()
time.sleep(2)
print("签到成功")
# 脚本运行成功,退出浏览器
browser.quit()
这里你可以用find_element_by_xpath 也可以用find_element_by_id,绝对路径包容性比较好,建议用xpath,如果一个属性定位不到页面原件,也可以考虑用两个属性叠加
##标签用*代替指定一个元素
find_element_by_xpath("//*[@id='Spring']")
##用两种属性定位一个元素
find_element_by_xpath("//font[@id='Spring' and @class='so']")
##文本定位
find_element_by_xpath("//font[text()='登录']")
遇到的问题
1、报错:FileNotFoundError: [WinError 2] 系统找不到指定的文件。
2、selenium.common.exceptions.WebDriverException: Message: Service chromedriver unexpectedly exited. Statued code was :1
爬虫库selenium在模拟浏览器打开网址时,
browser = webdriver.Chrome()
启动异常,有可能是因为windows使用的子进程进行回响时未得到响应,也可能是路径异常导致。
未得到响应解决办法:在subprocess.py文件中找到class Popen(object),并将__init__方法中的shell=False修改为shell=True
路径错误解决办法使用反斜杠分割,添加系统目录