ZeBinYao 2020-03-27 18:07 采纳率: 0%
浏览 162

编程题踩完切到函数题获取html之后为什么不进入第二个for循环直接结束运行了 求救

python代码

from pony.orm import *
db = Database()
class Tm(db.Entity):
    id = PrimaryKey(int, auto=True)
    bh = Optional(str)
    bt = Optional(str)
    fs = Optional(int)
    tgs = Optional(int)
    tjs = Optional(int)
    tgl = Optional(str)
    tmnl = Optional(str)
    html = Optional(str)
    tx = Optional(str)
    xqylj = Optional(str)
# db.generate_mapping()

db.bind(provider='sqlite', filename='e:/python/Tm.sqlite')
db.generate_mapping(create_tables=True)
set_sql_debug(True)

import time
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://pintia.cn/problem-sets/1111652100718116864/problems/type/7'
driver.get(url)
time.sleep(1)

html = driver.page_source
import re
reobj = re.compile(r'<tr><td class="answerIcon_1du7d"></td><td>([\d\D]*?)</td><td><a href="([\d\D]*?)" class="">([\d\D]*?)</a></td><td>([\d\D]*?)</td><td>([\d\D]*?)</td><td>([\d\D]*?)</td><td>([\d\D]*?)</td></tr>')
for i in range(2):#i用来判断是函数题页面还是编程题页面
    for match in reobj.finditer(html):
        bhs = match.group(1)#获取题目标号
        if "函数" in bhs:#如果标号中有函数这两个字就是函数题,否则就是编程题
            txs = "函数题"
        else:
            txs = "编程题"
        bts = match.group(3)#获取题目标题
        fss = match.group(4)#获取题目分数
        tgss = match.group(5)#获取题目通过数
        tjss = match.group(6)#获取题目提交数
        tgls = match.group(7)#获取题目通过率
        url2 = "http://pintia.cn" + match.group(2)#题目链接
        driver2 = webdriver.Chrome()
        driver2.get(url2)#打开题目链接
        time.sleep(3)
        f = False#f判断是否有无题目
        htmls = driver2.page_source
        reobj2 = re.compile(r'<div class="problem_Yd8rq p-3 mb-3 background-grey-1"><div class="ques-view"><p>([\d\D]*?)</p>')
        for match2 in reobj2.finditer(htmls):#获取详细题目内容
            tmnls = match2.group(1)
            f = True
        if f == False:#f用来判断是否有详细题目内容,若没有则为无
            tmnls = "无"
        s = Tm(bh = bhs,bt = bts,fs = fss,tgs = tgss,tjs = tjss,tgl = tgls,tmnl = tmnls,html = htmls,tx = txs,xqylj = url2)
        time.sleep(3)
        db.commit()
        driver2.quit()#关闭题目详情页链接的浏览器
    if i == 0:
        driver.find_element_by_xpath("//div[@id='sparkling-daydream']/div[3]/div[3]/div/ul/li/a/div/div[2]").click()#点击函数题,变为函数题页面
        html = driver.page_source#获取函数题的网页源代码
f.close()
  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 01:43
    关注

    参考GPT和自己的思路:

    根据你提供的代码,问题可能出现在第二个for循环内部。有可能在打开题目详情页链接的浏览器后,等待3秒后获取到的详细题目内容(tmnls)为空,因此f的值为False,跳出了该循环,进入下一个循环,但由于只有两个循环,因此直接结束了运行。建议你在获取tmnls后,再次检查其值是否为空,如果为空,则继续等待或者抛出异常,以避免程序提前结束运行。

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况