我在使用selenium实现自动化的时候,出现了两个重大bug,
bug1:就是我在遍历表格数据的时候,在实现判断上次用户度数和这次水表度数进行判断的功能的时候, 用户A出现某些报错后,会自动跳到下一个用户B处,但是携带的上次用户度数的值还是用户A的,这是为什么呢,请教一下各位,这是部分代码,还有日志文件。
bug2:当用户A出现某些问题后,比如说延时了,然后我设置了如果当前用户有报错,会continue,跳过当前用户,进入到下一个用户,目的是不想因为这个耽误时间。但是实际中用的时候,发现如果用户A出现了问题,他的下一个用户都会全部出错,感觉就是把错误信息带到了下一个用户,以此类推,导致写的程序效果不好,这是为什么呢?请教一下各位
for index, row in dataframe.iterrows():
user_id = row.get('署名') or row.get('客户编号') or row.get('用户编号')
is_change = row['是否更换']
old_base_code = row.get('拆表行度')
new_quantity = row.get('新表表码')
new_table_code = row.get('新表行度') or row.get('新表度数')
this_handle_time = row['换表日期']
# 获取符合条件的文件路径
file_paths_list, file_paths = get_image_paths(user_id, folder_path)
if len(file_paths_list) == 5 and is_change == '已更换':
try:
logging.info(f"正在处理用户 {user_id} 的数据...")
ActionChains(driver).send_keys(Keys.F5).perform()
time.sleep(5)
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, 'af04599c-bd1b-420d-b5de-3f8d9e697294'))).click()
time.sleep(2)
input_element = driver.find_element(By.XPATH, "//div[contains(@class,'input-group f-state-editable')]/input")
input_element.clear()
input_element.send_keys(user_id)
input_element.send_keys(Keys.ENTER)
time.sleep(2)
# 检查单个任务中心是否存在
if is_element_present(driver, "//div[contains(@class, 'headLine')]"):
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CLASS_NAME, "headLine"))).click()
time.sleep(5)
iframe = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//iframe[contains(@id, "rtf_iframe_WF0120")]'))
)
driver.switch_to.frame(iframe)
WebDriverWait(driver, 10).until(
EC.frame_to_be_available_and_switch_to_it(0)
)
############################问题在这个下面#################################################
# # 先对上次数据进行判断
lastime_input = None
lastime_input_element = None
chazhi = None
lastime_input_element = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "//farris-number-spinner[@formcontrolname='lastStartNum']//input")))
lastime_input = lastime_input_element.get_attribute('value')
lastime_input = lastime_input.replace(',', '')
chazhi = int(old_base_code) - int(lastime_input)
logging.info(f"上次抄表行数为:{lastime_input}")
logging.info(f"旧表行度为:{old_base_code}")
logging.info(f"差值是:{chazhi}")
if chazhi < 0 or chazhi >= 200 or int(old_base_code) < 0:
driver.switch_to.default_content()
time.sleep(3)
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//a[@title='任务中心']"))).click()
time.sleep(10)
# logging.info(f"用户 {user_id} 的数据有误,请检查!")
dataframe.at[index, '状态'] = '旧表行度为负数!不能小于上次抄表行数,不能比上次抄表行数大与等于200'
driver.get("https://portal.gzwatersupply.com/platform/runtime/sys/web/index.html#/main/taskcenter/task-main?funcId=WF0101&appType=menu&tabId=WF0101&cvft=eyJzZXNzaW9uSWQiOiJlNzQxMGNmZS1kM2FlLTQxNjctODNlOS00ZGFlMjBmNmU0ODAiLCJ1aWQiOiJBMDAwMjc4IiwidGFiSWQiOiJXRjAxMDEiLCJmdW5jSWQiOiJXRjAxMDEiLCJhcHBJZCI6bnVsbCwiYXBwRW50cmFuY2UiOm51bGwsImJvSWQiOiJUYXNrX015VGFzayIsIm1lbnVOYW1lIjoi5rWB56iL5Lit5b%2BDIn0%3D&appMode=spa&")
time.sleep(5)
ActionChains(driver).send_keys(Keys.F5).perform()
continue
# 单个任务中心 -> 附件管理按钮
# ma_element = driver.find_element(by=By.ID, value='toolBarItem_7768')
time.sleep(5)
ma_element = None
ma_element = WebDriverWait(driver, 15).until(
EC.element_to_be_clickable((By.XPATH, "//div[@id='header-nav']//f-response-toolbar//div[2]//div//button[1]"))
)
# ma_element = driver.find_element(By.XPATH, "")
ma_element.click()
time.sleep(15)
...