一、分享几个学习python网页自动化的教程
1、B站视频教程
2、文字教程
二、话不多说直接上代码
# 计算kane
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import xlrd
from time import sleep
from xlutils.copy import copy
import xlwt
import openpyxl as op
# 打开excel表格
data_excel = xlrd.open_workbook('浅前房公式计算20220718.xlsx')
#wb = xlwt.Workbook('浅前房公式计算20220718_已计算.xlsx')
# wb = copy(data_excel) # 复制原有表格
# ws = wb.get_sheet(0)
wb = op.load_workbook("浅前房公式计算20220718_已计算.xlsx")
ws = wb["简略版"]
# 获取所有sheet名称
names = data_excel.sheet_names()
# 获取book中的sheet工作表,返回一个xlrd.sheet.Sheet()对象
table = data_excel.sheet_by_name(sheet_name='简略版') # 通过名称获取
# excel工作表的行列操作
n_rows = table.nrows # 获取该sheet中的有效行数 1118行
wd = webdriver.Edge("msedgedriver") # 激活浏览器驱动
#wd = webdriver.Chrome("chromedriver") # 激活浏览器驱动
wd.implicitly_wait(10) # 等待时间
wd.get("https://www.iolformula.com/") # 打开网址
wd.find_element(By.CSS_SELECTOR, '#post-30 > div > div > div').click() # 点击 I agree
# 共1117行
start = 1 # 开始序号
lenth = 1117 # 一次计算量
for j in range(lenth):
row = start + j
# 返回某行中所有单元格的数据组成的列表 row_data
row_data=table.row_values(row, start_colx=0, end_colx=None) # [1.0, '599894', 'F', '人工晶体 ZCB00', '24.0D', 119.36, 22.3276213748915, 44.6550089391462, 46.361144809085, 2.91141362454544, 4.77435495569251, 0.529769979523909, 529.769979523909, '', -0.34]
acd = row_data[9]
acd = float(acd)
# 先判断 acd值是否在范围内
while( ((acd>1.50)or(acd==1.50))and(acd<5.00)or(acd==5.00) ):
xuhao = int(row_data[0])
id = row_data[1] # 获取id
sex = row_data[2] # 获取性别
iol_type = row_data[3] # 晶体类型
IOLPower = row_data[4] # 功率
IOLPower = IOLPower[0:-1]
al = row_data[6]
k1 = row_data[7]
k2 = row_data[8]
lt = row_data[10]
CCT = row_data[12]
kane = 0
# 1.输入ID
wd.find_element(By.CSS_SELECTOR, '#ID').send_keys('{}'.format(id))
# 2.点击性别 M/F
if sex == "M":
wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div:nth-child(3) > div:nth-child(3) > div > div > div > div.btn-group.radio-group.h-gender > label:nth-child(1)').click()
else:
wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div:nth-child(3) > div:nth-child(3) > div > div > div > div.btn-group.radio-group.h-gender > label:nth-child(2)').click()
# 3.填写A-Constant 或 选择iol_type
if iol_type == "人工晶体 ZCB00":
iolconstant = 119.36
else:
iolconstant = 119.2
wd.find_element(By.CSS_SELECTOR, '#A-Constant1').send_keys('{}'.format(iolconstant))
#Select(wd.find_element(By.ID, 'type1')).select_by_value('4') # 根据ID选取复选框选项
# 4.填写AL
wd.find_element(By.CSS_SELECTOR, '#al-right').send_keys('{:.2f}'.format(float(al)))
# 5.填写k1
wd.find_element(By.CSS_SELECTOR, '#k1-right').send_keys('{:.2f}'.format(float(k1)))
# 6.填写k2
wd.find_element(By.CSS_SELECTOR, '#k2-right').send_keys('{:.2f}'.format(float(k2)))
# 7.填写acd
wd.find_element(By.CSS_SELECTOR, '#acd-right').send_keys('{:.2f}'.format(float(acd)))
# 8.填写lt
wd.find_element(By.CSS_SELECTOR, '#lt-right').send_keys('{:.2f}'.format(float(lt)))
# 9.填写CCT
wd.find_element(By.CSS_SELECTOR, '#cct-right').send_keys('{}'.format(CCT))
# 10.点击计算
wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div.blocks_button > div.button_submit_block.form-group.submit.row.jq_class_1 > div:nth-child(1) > input').click()
# 等待 8 秒
sleep(8)
# 11.输出kane值
element = wd.find_element(By.XPATH, '/html/body/div[2]/div/div/form/div[4]/div/div/div[1]/div[2]/div/div/div[2]/table/tbody')
elements = element.find_elements(By.TAG_NAME, 'td')
num = len(elements)
for i in range(num):
if elements[i].text == IOLPower:
kane = elements[i+1].text
break
print("序号 = {} , id = {}, IOLPower = {}, kane = {}".format(xuhao, id, IOLPower, kane))
# 12.将kane写入excel表格
#ws.write(row, 13, kane)
ws.cell(row + 1, 14, kane)
# 13.点击 new patient 下一位病人
wd.find_element(By.CSS_SELECTOR,'body > div.container > div > div > form > div.blocks_button > div.button_result_block > div > div:nth-child(3) > input').click()
wb.save("浅前房公式计算20220718_已计算.xlsx")
break
# #Select(wd.find_element(By.ID, 'org_type1')).select_by_visible_text('社会服务机构') # 根据文本选取复选框选项
#
# # 打开复选框后进入了嵌套的html界面
# wd.find_element(By.CSS_SELECTOR, '#org_record1 > tr:nth-child(2) > td:nth-child(2) > a').click() # 点击选择
# wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR, 'body > div.div_tips > iframe'))
# wd.find_element(By.CSS_SELECTOR, '#org_list > ul > li > span.son > ul > li:nth-child(1) > a:nth-child(3)').click() # 点击东城区
# wd.switch_to.default_content()
#
# wd.find_element(By.CSS_SELECTOR, 'body > div.nav > div > a:nth-child(2)').click() # 点击志愿项目
# wd.find_element(By.CSS_SELECTOR, 'body > div.main > div:nth-child(1) > ul > li:nth-child(2) > div > a').click() # 点击图片
#
# # 若跳转到其他网址需使用下面四句判断
# for window_handle in wd.window_handles:
# wd.switch_to.window(window_handle)
# if '助力' in wd.title:
# break
#
# # wd.find_element(By.CSS_SELECTOR, '#main_body > div.wrap.clearfix.m10 > div.conr >'
# # ' div:nth-child(2) > table > tbody > tr > td:nth-child(2) > a').click() # 验证是否转到对应网页
# # wd.quit() # 退出浏览器驱动,一般不加