python爬虫驾校自动模拟考

老是报错,爬题库录入没问题,就是自动答题老是出错。大哥大姐们帮忙看看

爬题部分。

import re
import requests
import csv # 创建文件 保存数据
file = open('科目四题库.csv',mode='a',encoding='utf-8',newline='') #a是写入
csv_writer=csv.DictWriter(file,fieldnames=['problem','answer'])
csv_writer.writeheader()
#读取文本,获取答案ID
f = open("答案ID.txt",encoding= 'utf-8')#默认 mode=‘r’
#读取内容,split字符串分割
answer_id_list = f.read().split(',')
#for循环遍历,提取答案ID
for answer_id in answer_id_list:
#构建答案页面链接
link =f'https://tiba.jsyks.com/Post/{answer_id}.htm'
# print(link)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51'
}
html_data=requests.get(url=link,headers=headers).text
# print(html_data)
problem=re.findall('<title>(.*?)</title>',html_data)[0]#[0]表示列表取值
answer=re.findall('答案是:(.*?)。',html_data)[0]
dit={
'problem':problem,
'answer':answer,
}
csv_writer.writerow(dit) #writerow()将一个列表全部写入csv的同一行。

print(problem,answer)

自动答题部分

from selenium import webdriver
import pandas as pd#读取用pandas
#导入正则
import re
df = pd.read_csv('科目四题库.csv')
key = []
value = []
#获取每一道题目
for i in df['problem']:#以问题作为键
#把题目添加到列表
key.append(i)
for j in df["answer"]:#以答案作为值
#把答案添加到列表里面
value.append(j)
#把两个列表和并成字典
dic = dict(zip(key,value))
# print(dic)
#打开浏览器
driver = webdriver.Chrome(r'D:\Python\Python311\Scripts\chromedriver.exe')#括号里驱动路径,如果驱动在python安装目录里,就不用写。
#访问网站
driver.get('https://www.jsyks.com/kms-fzks')
driver.maximize_window()#全屏
print(dic)
for page in range(50):
#提取问题,通过CSS选择器查找元素
Questions= driver.find_element_by_css_selector('#ExamTit').text
#\d+匹配数字 正则 获取题目
Question = re.findall('\d+. (.*)',Questions)[0]
# print(dic)
# print(Question)
# print(dic[Question])
answer = dic[Question]
#多选,答案肯定大于1
if len(answer) == 1:
#判断答案内容
if answer == '对':
#定位对的原色,进行点击操作
driver.find_element_by_css_selector('#Tx1 #btnDa11').click() #id=TX1 id=btnDa11
elif answer == '错':
driver.find_element_by_css_selector('#Tx1 #btnDa12').click()
elif answer == 'A':
driver.find_element_by_css_selector('#Tx2 #btnDa21').click()
elif answer == 'B':
driver.find_element_by_css_selector('#Tx2 #btnDa22').click()
elif answer == 'C':
driver.find_element_by_css_selector('#Tx2 #btnDa23').click()
elif answer == 'D':
driver.find_element_by_css_selector('#Tx2 #btnDa24').click()
#点击下一题,定位下一题按钮
driver.find_element_by_css_selector('#actArea #btnNext2').click()
elif len(answer) > 1:
#多选
for x in answer:
if x == 'A':
driver.find_element_by_css_selector('#Tx2 #btnDa21').click()
elif x == 'B':
driver.find_element_by_css_selector('#Tx2 #btnDa22').click()
elif x == 'C':
driver.find_element_by_css_selector('#Tx2 #btnDa23').click()
elif x == 'D':
driver.find_element_by_css_selector('#Tx2 #btnDa24').click()

driver.find_element_by_css_selector('#actArea #btnNext2').click()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值