对于新手而言,掌握好方向盘的打法非常重要,关系到我们能否顺利通过驾考,拿到驾照。而
开车时方向盘又是最重要的,握好方向盘等于是给自己的安全上了保险。
所有文章完整的素材+源码都在👇👇
科目一考试为上机考试,100道题,题型为判断题和单选题,以案例、图片及动画形式的题目
为主,考试时间45分钟,90分及以上过关。
最近这段时间天气正正好,不冷不热,是学习考驾照的好时机。
想学的宝子,最好是现在这个季节,要知道,当年(咳咳咳...)也就是前年我学驾照的时候夏
天晒的乌漆嘛黑的
许多驾考学员们,虽说科二科三需要实体练车,但是科一科四都是理论知识点,那不得一次
过。平常的话我们可以利用碎片化的时间巩固基础知识, 争取科科一次过!
今天小编教大家一个小脚本啦——Python实现自动答题 价值 1000元 外包订单项目案例。
开发环境:
Python3、Pycharm社区版。
import requests ---> 数据请求模块 pip install requests
import re
from selenium import webdriver ---> 自动测试模块 pip install selenium==3.141.0 <指定版本安装>。
谷歌浏览器 以及 谷歌驱动 <版本和浏览器版本相对应> 环境没有安装的同学, 可以去安装。
相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以直接找我厚台获取 。
第三方库的安装方式如下:
一般安装:pip install +模块名
镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名
(还有很多国内镜像源,这里是豆瓣的用习惯了,其他镜像源可以去看下之前文章都有的)
模块安装问题可以详细的找我给大家讲一下的哈,之前其实也有的文章写了的。
一. 数据来源分析 --> 通过浏览器 开发者工具 抓包分析 1. 明确需求: - 明确采集的网站是什么
题目答案页面: https://tiba.jsyks.com/Post/2c15b.htm
2. 分析这两个数据怎么获取
数据来自于 --> 答案页面
第一题: https://tiba.jsyks.com/Post/2c15b.htm
问题: 获取1701道题目 --> 分析每个题目答案页面URL构成
第一题: https://tiba.jsyks.com/Post/2c15b.htm
第二题: https://tiba.jsyks.com/Post/8ac1a.htm
第三题: https://tiba.jsyks.com/Post/e97d7.htm 2c15b / 8ac1a / e97d7
所以 只需要获取所有答案页面ID, 即可获取所有题库 。
"""
# 导入自动化测试模块 --> 重点 3.141.0 版本
from selenium import webdriver
# 导入pandas
import pandas as pd
# 导入正则
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))
"""
1. 打开浏览器
Chrome 浏览器 谷歌
webdriver.Chrome('驱动路径')
I. 驱动选择
根据你自己浏览器版本, 选择驱动版本, 最相近即可
驱动只有32
II. 驱动路径写法
1. 不写路径
- 驱动和你代码在一起
- 驱动和你python安装目录在一起
2. 写路径 绝对路径
"""
driver = webdriver.Chrome()
# 2. 访问网站
driver.get('https://www.jsyks.com/kms-fzks')
driver.maximize_window()
"""
答题操作:
1. 题库 <获取出来了>
读取csv文件, 把题目内容以及答案读取出来
1701道题,要读1701次啊?
可以把问题作为字典键, 答案作为字典值
根据问题, 可以获取答案
定位元素, 获取数据内容
"""
print(dic)
for page in range(50):
Questions = driver.find_element_by_css_selector('#ExamTit').text
# \d+ 匹配数字 获取题目
Question = re.findall('\d+. (.*)', Questions)[0]
answer = dic[Question]
# 多选题, 答案肯定大于1
if len(answer) == 1:
# 判断答案内容 选择选项
if answer == '对':
# 定位对元素, 进行点击操作
driver.find_element_by_css_selector('#TX1 #btnDa11').click()
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()
driver.find_element_by_css_selector('#actArea #btnNext3').click()
driver.find_element_by_css_selector('#Tip_Msg span input:nth-child(1)').click()
import requests
import re
import csv
import concurrent.futures
import parsel
def AnswerID():
f = open('答案ID.txt', encoding='utf-8')
answer_id_list = [answer_id for answer_id in f.read().split(',')]
return answer_id_list
def GetResponse(html_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
html_data = requests.get(url=html_url, headers=headers).text
return html_data
def GetContent(AnswerID):
AnswerUrl = f'https://tiba.jsyks.com/Post/{AnswerID}.htm'
html_data = GetResponse(html_url=AnswerUrl)
selector = parsel.Selector(html_data)
problem = selector.css('#question a::text').get()
answer = selector.css('#question h1 b::text').getall()
if len(answer) == 0:
answer = selector.css('#question h1 u::text').get()
AnswerDict = {
'Problem': problem,
'Answer': answer,
}
return AnswerDict
def main(page):
AnswerDict = GetContent(AnswerID=page)
csv_writer.writerow(AnswerDict)
print(AnswerDict)
if __name__ == '__main__':
# GetContent(AnswerID='8502e')
answer_id_list = AnswerID()
f = open('科目四题库.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['Problem', 'Answer'])
csv_writer.writeheader()
exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)
for answer_id in answer_id_list:
exe.submit(main, answer_id)
exe.shutdown()
五、效果展示
怎么样,学完这个内容收获大吗?如果觉得有用,请转发收藏吧~嘿嘿,我们下期再见,
小可爱们还有什么内容是想看的呢?
项目1.8 Wifi破解免费
Python编程零基础如何逆袭成为爬虫实战高手之《WIFI破解》(甩万能钥匙十条街)爆赞爆赞~
项目1.9 爬虫+数据分析实战:全球疫情最新消息、淘宝爬虫、秒杀脚本
【Python合集系列】爬虫有什么用,网友纷纷给出自己的答案,王老师,我..我想学那个..爬虫。可以嘛?“(代码免费分享)
项目2.0 Python爬虫合集系列
【Python爬虫系列】为什么我喜欢python?来看看这些让人爱不释手的原因吧,购物网站大盘点,看过这些python做的项目,我立马入坑了…(神奇 | 爱了,爱了)
汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模
我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful
对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking