0


基于selenium控制浏览器预约实验(电镜-太多人抢了)

一, 问题。

实验过程中 电镜太难约了(每次一开放都被抢完了)(那个学校的电镜我就不说了哈)

二, 目标。

通过控制浏览器,实现快速预约。

三,实现过程。

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)
#无限循环来实现

可以把各个部分写成函数,来统一实现。有什么问题欢迎各位大佬批评指正。


本文转载自: https://blog.csdn.net/weixin_46763745/article/details/127049170
版权归原作者 小朱朱荣咿呀咿呀 所有, 如有侵权,请联系我们删除。

“基于selenium控制浏览器预约实验(电镜-太多人抢了)”的评论:

还没有评论