py利用selenium库 爬取 python123官网的练习题及答案

下载安装selenium库,安装webdriver

具体安装步骤请移步百度官网

最近在做python123官网的一些python 练习题,做完了想整理一下,题目过多,就想省点事,写了一个很low的爬虫,废话不多说,看代码吧,可以直接获取你做过的所有题目,包括答案以及代码

# _*_ coding:utf-8  _*_
# @Time   : 2020-5-9 15:42
# @Author  : BGLB
# @Software : PyCharm
from time import sleep

from selenium.webdriver import Chrome

web = Chrome()
web.maximize_window()


def get_element():
    web.get("https://www.python123.io/index/login")
    uername = web.find_element_by_xpath(
        '//*[@id="links"]/div[1]/div[2]/div/div[1]/div[1]/div/div[1]/div/div[1]/form/div[1]/div/input')
    passworld = web.find_element_by_xpath(
        '//*[@id="links"]/div[1]/div[2]/div/div[1]/div[1]/div/div[1]/div/div[1]/form/div[2]/div/input')

    uername.send_keys('email@email.com')  # python123官网的用户名
    passworld.send_keys('password')  # python123的账户密码

    login = web.find_element_by_xpath(
        '//*[@id="links"]/div[1]/div[2]/div/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div[1]/button')
    login.click()
    sleep(1)
    web.get('https://www.python123.io/student/courses/1521/intro')
    sleep(2)
    web.find_element_by_xpath('//span[text()=10]').click()
    flag = True
    for i in range(10):
        if i == 9:
            flag = False
        tumu_list = web.find_elements_by_xpath(
            '//*[@id="app"]/div/div[1]/div[1]/div[2]/section/div/div/div[2]/div/section/div/div/div[2]/div[2]/div/div[2]/div[2]/div[2]/div')
        tumu_chuli(tumu_list[i], flag)
        web.back()  # 返回上一页
        web.back()
        web.back()
        sleep(2)
    web.close()


def save(failname, content):
    '''
    保存到文件
    :param failname:文件名
    :param content:内容
    :return:
    '''
    with open(failname, 'a', encoding="utf-8") as f:
        f.write(content)
        f.close()


def tumu_chuli(list_timu, flag):
    failname = list_timu.find_element_by_tag_name('b').text[0:3]+".txt"
    list_timu.click()
    sleep(2)
    count = 2
    if flag:
        web.find_element_by_xpath(
            '//*[@id="group-wrapper"]/div/div[2]/div/div/div/div[2]/div/div/div[2]/div[2]/div/div[1]/div/div/div[1]').click()

        xuanze = web.find_element_by_xpath(
            '//*[@id="group-wrapper"]/div/div[2]/div/div/div/div[2]/div/div[1]/div/div/div[1]')
        item = xuanze.find_element_by_tag_name('b').text
        xuanze_list = xuanze.find_elements_by_class_name('card')
        save(failname, item)
        for xz in xuanze_list:
            save(failname, "\n"+xz.text+"\n")
        web.back()
        sleep(2)

        web.find_element_by_xpath(
            '//*[@id="group-wrapper"]/div/div[2]/div/div/div/div[2]/div/div/div[2]/div[2]/div/div[2]/div/div/div/div[1]').click()
        for q in range(count):
            bs_chuli(failname)

    else:
        count = 4
        web.find_element_by_xpath(
            '//*[@id="group-wrapper"]/div/div[2]/div/div/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[1]').click()
        for j in range(count):
            bs_chuli(failname)
    print(failname+"写入完成!")


# 编程题的处理
def bs_chuli(failname):
    sleep(1)
    bs_timu = web.find_element_by_class_name('mce-content-body').text
    # 由于网站的代码中有特殊字符,所以用了以下的方式替换了所有特殊字符
    bs_daan_my = web.find_element_by_xpath(
        '/html/body/div/div/div[1]/div[1]/div[2]/section/div/div/div[2]/div/section/div/div/div[2]/div/div/div/div[2]/div/div/div/div[1]/div/div[3]/div/div/div/div[3]/div/div/div/div[2]/div/div[3]'
    ).text.replace('·', ' ').replace('¤', '').replace('¬', '').replace('¶', '')
    web.find_element_by_xpath(
        '/html/body/div/div/div[1]/div[1]/div[2]/section/div/div/div[2]/div/section/div/div/div[2]/div/div/div/div[2]/div/div/div/div[1]/div/div[3]/div/div/div/div[2]/ul/li[3]').click()
    sleep(1)
    bs_daan_cankao = web.find_element_by_xpath(
        '/html/body/div/div/div[1]/div[1]/div[2]/section/div/div/div[2]/div/section/div/div/div[2]/div/div/div/div[2]/div/div/div/div[1]/div/div[3]/div/div/div/div[5]/div/div/div/div').text
    web.find_element_by_xpath(
        '//button[2]').click()
    save(failname, "\n"+bs_timu+"\n【我的答案】\n"+bs_daan_my+"\n"+bs_daan_cankao)
    sleep(1)


get_element()

代码变量命名有点low,写了大概一个下午吧,还是功力不够哇,要是直接能保存为一个好看的md格式,那就完美了,分享的时候会更加方便。慢慢加油吧!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值