【PYTHON】案例之 自动答题脚本(驾照科目一)(源代码)

2023.2.16

"""
    - 自动答题脚本(驾驶员科目一题目)
    思路:打开网站,获取正确的答案;然后对问题进行对比,进行模拟点击就可以了。
"""
from selenium import webdriver  # 网站交互
from selenium.webdriver.common.by import By  # 网站交互
import requests  # 网站数据请求
import parsel  # 网站解析


# todo:2.获取答案;对答案网址发送请求并解析数据,提取需要的数据保存在列表中。
def get_answer(answerUrl):
    html_data = requests.get(url=answerUrl).text  # 发送请求获取网页数据。

    selector = parsel.Selector(html_data)  # 解析数据;
    question = selector.css('#question h1 strong a::text').get()  # 在答案界面,获取问题;
    answer = selector.css('#question h1 u::text').get()  # 在答案界面,获取答案;
    # 对答案进行纠正;
    if answer == '对':
        answer = '正确'
    elif answer == '错':
        answer = '错误'
    # 保存字典中
    dit = {
        '问题': question,
        '答案': answer
    }
    return dit


if __name__ == '__main__':
    # todo:1.获取答案链接。
    driver = webdriver.Firefox()  # 实例化浏览器对象;
    driver.get('https://www.jsyks.com/kmy-mnks')  # 打开网站;
    # lis = driver.find_elements_by_css_selector('.Content li')   # 已淘汰。
    lis = driver.find_elements(By.CSS_SELECTOR, '.Content li')  # 获取所有li标签,返回列表;(li标签存储正确答案网址)

    answerUrlList = [f'https://tiba.jsyks.com/Post/{li.get_attribute("c")}.htm' for li in lis]  # 连接答案网址并存储列表;
    # answers_url=[]
    # for i in lis:
    #     li = i.get_attribute('c')
    #     answer_url = 'https://tiba.jsyks.com/Post/' + li + '.htm'   # 连接答案网址
    #     answers_url.append(answer_url)      # 添加网址进列表

    # todo:3.网页元素找到问题标签,和答案进行对比,模拟点击。
    page = 1  # 第几个问题
    for li, answerUrl in zip(lis, answerUrlList):
        answerDit = get_answer(answerUrl)   # 获取答案,返回字典;
        bs = li.find_elements(By.TAG_NAME, 'b')  # 获取'b'标签;(正确和错误),答案为两个标签;'b'是网页元素标签;
        num = 1  # 第几个答案;
        for b in bs:
            choose = b.text  # 赋值答案;
            print(choose)
            if len(choose) > 2:  # 如果答案长度大于2,就是ABCD,小于2就是正确和错误;
                choose = choose[0]  # 第一个答案给choose;
            if choose in answerDit['答案']:  # 判断choose是否在答案中;然后点击;
                driver.find_element(By.CSS_SELECTOR, f'#LI{page} b:nth-child({num + 2})').click()

            num += 1
        page += 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值