import time
import xlwt
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wwait
# chrome和driver版本要匹配
# http://npm.taobao.org/mirrors/chromedriver/
browser = webdriver.Chrome(executable_path=r'F:\downloads\chromedriver_win32\chromedriver.exe')
url = "https://www.xiaoqiqiao.com/unlogin/#/login"
browser.get(url)
time.sleep(3)
# 3.刷新浏览器
browser.refresh()
# 4.设置浏览器的大小
browser.maximize_window()
username = "xxxxxx"
passwd = "xxxxxx"
# 输入用户名
browser.find_element_by_xpath('//*[@id="username"]').send_keys(username)
browser.find_element_by_xpath('//*[@id="password"]').send_keys(passwd)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/div[4]/div/div/form/div[3]/div/div/div/button').click()
time.sleep(1)
# 找到考试测评
wwait(browser, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="rootWrapper"]/div/div/div[2]/div[1]/div/ul/li[3]'))).click()
# 找到题库练习
wwait(browser, 10).until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="rootWrapper"]/div/div/div[2]/div[2]/div/div/div[2]/ul/li[3]'))).click()
time.sleep(1)
# 进入题库
wwait(browser, 10).until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="rootWrapper"]/div/div/div[2]/div[2]/div/div/div[2]/table/tbody/tr/td[6]/span/a'))).click()
time.sleep(1)
handles = browser.window_handles
browser.switch_to.window(handles[1])
total_list = []
for i in range(600):
total_data = []
# 点击查看答案
for_answer = wwait(browser, 10).until(
EC.presence_of_element_located((By.XPATH, '//div[@class="look_answer downskip"]')))
# 报错解决https://blog.csdn.net/qq_41424519/article/details/87906207
webdriver.ActionChains(browser).move_to_element(for_answer).click(for_answer).perform()
# 题目
element_topic = wwait(browser, 10).until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="rootWrapper"]/div/div/div[2]/div/div/div/div/div/div[1]/div[3]/div[1]')))
total_data.append(element_topic.text)
elements = wwait(browser, 10).until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="rootWrapper"]/div/div/div[2]/div/div/div/div/div/div[1]/div[3]')))
topic_infor = elements.find_elements_by_xpath('//div[@class="topic_infor"]')
for option in topic_infor:
total_data.append(option.text)
true_answer = elements.find_elements_by_xpath('//span[@class="true_answer"]')
answer_list = []
for answer in true_answer:
answer_list.append(answer.text)
total_data.append(answer_list)
# 格式化数据,为写入excel做准备
if len(total_data) < 8:
count = 8 - len(total_data)
for k in range(count):
total_data.insert(-1, "")
total_list.append(total_data)
# 下一题
# 最后一题没有下一题按钮,故做此判断
if i < 599:
next_question = wwait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="downskip"]')))
webdriver.ActionChains(browser).move_to_element(next_question).click(next_question).perform()
else:
break
f = xlwt.Workbook()
sheet = f.add_sheet('QA', cell_overwrite_ok=True)
for hi in enumerate(total_list):
for num in range(len(hi[1])):
sheet.write(hi[0], num, hi[1][num])
f.save("QA.xls")
Python之selenium爬取考题代码并写入excel实践
最新推荐文章于 2023-07-24 18:35:20 发布