一, 问题。
实验过程中 电镜太难约了(每次一开放都被抢完了)(那个学校的电镜我就不说了哈)
二, 目标。
通过控制浏览器,实现快速预约。
三,实现过程。
1,用selenium登陆,并获取cookies(实现下次登陆)。
2,跳转到电镜预约网页。
3,执行javascript代码,模拟提交表单(预约起止时间,算是比较关键的点了)
4,时间器(用在预约开放时,马上执行代码)
#学校网站我就不整出来了哈,免得和我抢
cs_url = "******"
tem_url = "******"
这分别是 cs_url , tem_url网站哈
步骤一,第一次登陆网站(登陆并获得cookies,并跳转的电镜预约网页)
#相关库
from selenium import webdriver
import pickle #保存和读取cookies实现免登陆工具
from time import sleep
driver = webdriver.Chrome()
driver.get(cs_url)
sleep(40)#在这段时间内登陆账号
pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))#在您登陆账号之后,把cookies保存下来
driver.get(tem_url)
第二次登陆,直接用cookies
#库载入就不说了哈
driver = webdriver.Chrome()
driver.get(cs_url)
try:
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
cookie_dict = {
'domin': '**********',#实验预约平台的域名
'name': cookie.get('name'),
'value': cookie.get('value')
}
driver.add_cookie(cookie_dict)
print('###载入Cookie###')
except Exception as e:
print(e)
driver.get(tem_url)
步骤二,登陆了账号,并成功到达电镜的页面tem_url。(分析:1,在这个页面,人工的过程是,勾选时间点。然后点确定提交。可以用selenium模拟操作, 但是页面中的元素定位不到,而且他的预约时间长短都有限制。2,所以我们就应该分析这个页面的javascript 代码。然后提交我们自定义的表单。
分析图
在这个界面就可以用selenium定位元素,填写信息,比较简单。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
s1 = Select(self.driver.find_element(By.ID, "CAR_Tbookingrecord_BillingProFileId"))
s1.select_by_value(value_1)
self.driver.find_element(By.XPATH,'//[@id="CAR_Tbookinghassample_SampleName"]').send_keys("合成纳米材料")
self.driver.find_element(By.XPATH,'//[@id="CAR_Tbookinghassample_SampleCount"]').send_keys("3")
s2 = Select(self.driver.find_element(By.ID, "CAR_Tbookinghassample_SampleFormID"))
s2.select_by_value("283")
s3 = Select(self.driver.find_element(By.ID, "CAR_Tbookinghassample_SampleSourceID"))
s3.select_by_value("1302")
#保存按钮
#self.driver.find_element(By.XPATH, '//*[@id="formID"]/div[44]/div[2]/button').click() #不成功便成仁
步骤三,时间器,用于预约时间开放时,准时执行代码。
import time
while True:
time_now = time.strftime("%H:%M:%S", time.localtime())
print(time_now)
if time_now == cs_time:
con.choice_time()
break
else:
con.re_net()
#sleep(0.2)
#无限循环来实现
可以把各个部分写成函数,来统一实现。有什么问题欢迎各位大佬批评指正。
版权归原作者 小朱朱荣咿呀咿呀 所有, 如有侵权,请联系我们删除。