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