效果图展示
1.导入所需的模块:
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import requests
import parsel
这段代码导入了所需的模块。 selenium 用于控制浏览器, time 用于处理时间, requests 用于发送 HTTP 请求, parsel 用于解析 HTML 或 XML 数据。
2.实例化一个浏览器对象:
driver = webdriver.Chrome()
通过实例化 webdriver.Chrome()
,创建一个 Chrome 浏览器对象。
3.打开指定网页:
driver.get('https://www.jsyks.com/kmy-mnks')
使用 get()
方法打开指定的网页。
4.强制等待和最大化浏览器窗口:
time.sleep(2)
driver.maximize_window()
使用 time.sleep()
方法进行强制等待 2 秒,然后使用 maximize_window()
方法最大化浏览器窗口。
5.隐式等待:
driver.implicitly_wait(10)
使用 implicitly_wait()
方法设置隐式等待时间为 10 秒。这意味着在查找元素时,如果元素未立即出现,将最多等待 10 秒。
6.查找题目选项并选择正确答案:
lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li')
for li in lis:
# 获取题目id
rid = li.get_attribute('c')
url = f'https://tiba.jsyks.com/Post/{rid}.htm'
response = requests.get(url=url).text
selector = parsel.Selector(response)
answer = selector.css('#question u::text').get()
if answer == '对':
answer = '正确'
elif answer == '错':
answer = '错误'
bs = li.find_elements(By.CSS_SELECTOR, 'B')
for b in bs:
choose = b.text
if len(choose) > 2:
choose = choose[0]
if answer == choose:
b.click()
在 lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li')
中,使用 CSS 选择器找到题目列表的每个题目选项。然后,依次处理每个题目: 1.获取题目的 id,并构造获取题目内容的 URL。 2.使用 requests.get()
方法发送请求并获取响应体的文本数据。 3.使用 parset.Selector()
构造一个 Selector 对象来解析响应体。 4.使用 CSS 选择器 '#question u::text'
获取题目的答案。将答案进行处理,将 '对'
转换为 '正确'
,将 '错'
转换为 '错误'
。 5.使用 li.find_elements(By.CSS_SELECTOR, 'B')
找到当前题目的选项。遍历选项,并将选项与答案进行比较,如果匹配,则点击该选项。
7.提交试卷:
driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()
通过 CSS 选择器找到提交试卷的按钮,并点击它。
8.添加阻塞:
input()
通过 input()
方法添加一个阻塞,使程序暂停在这里,等待用户输入。
9.关闭浏览器:
driver.quit()
使用 quit()
方法关闭浏览器。
10.全部代码如下:
"""
[使用模块]: requests >>> pip install requests <第三方模块>
selenium >>> pip install selenium <第三方模块>
parsel >>> pip install parsel <第三方模块>
time <内置模块>
"""
# 导入浏览器对象
from selenium import webdriver
# 导入时间模块
import time
# 导入元素定位功能
from selenium.webdriver.common.by import By
# driver.find_element_by_css_selector() 4 一定会报错 弃用 3
# 导入数据请求模块
import requests
# 数据解析模块
import parsel
# 实例化一个浏览器对象
driver = webdriver.Chrome()
# 打开浏览器的窗口
driver.get('https://www.jsyks.com/kmy-mnks')
# 强制等待
time.sleep(2)
# 最大化浏览器的窗口
driver.maximize_window()
# 隐式等待 智能
driver.implicitly_wait(10)
# elements 返回的是一个列表对象
lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li')
# print(len(lis))
# print(lis)
for li in lis:
time.sleep(0.2) # 优先考虑使用随机数
rid = li.get_attribute('c')
# print(rid)
url = f'https://tiba.jsyks.com/Post/{rid}.htm'
# 获取到响应体对象的文本数据
response = requests.get(url=url).text
# 转对象
selector = parsel.Selector(response)
answer = selector.css('#question u::text').get()
# print(answer)
# 重新赋值
if answer == '对':
answer = '正确'
elif answer == '错':
answer = '错误'
# else: 不确定的情况
# print(answer)
bs = li.find_elements(By.CSS_SELECTOR, 'B')
for b in bs:
# 获取选项的内容
choose = b.text
# print('题目的选项是', choose)
# print('正确答案是', answer)
# 可能错题
# if answer in choose:
# # 正确答案的点击操作
# b.click()
if len(choose) > 2:
choose = choose[0]
if answer == choose:
b.click()
# 提交试卷
driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()
# 添加阻塞
input()
# 关闭浏览器
driver.quit()
创作不易,留下一个小点赞和关注呗,编程之路,一起加油,朋友