java - JSoup 未完全渲染长页面

标签 java android jsoup

有一个website我正在尝试使用 JSoup 库来获取信息。问题是响应中只有页面的一部分。

这是我的代码:

Connection.Response loginForm = Jsoup.connect(
        String.format("https://student.utm.utoronto.ca/timetable/timetable?yos=%s&session=20199", i))
        .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36")
        .method(Connection.Method.GET)
        .timeout(600000)
        .header("Accept-Encoding", "gzip, deflate, br")
        .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
        .header("Accept-Language", "en-US,en;q=0.9,fr;q=0.8")
        .header("Cache-Control","max-age=0")
        .header("Connection", "keep-alive")
        .header("Host", "student.utm.utoronto.ca")
        .header("Sec-Fetch-Mode","navigate")
        .execute();

我尝试从浏览器中的请求 header 中复制尽可能多的 header 。

我怀疑 javascript 在最初加载页面后运行,这就是为什么我没有在响应中获得完整页面的原因。

这是带有 tr 标记的最后一个元素:

      <tr id="tr_MAT102H5FTUT0125" class=" TUT W1 meeting_section OL0 todAft"> 
       <td> </td> 
       <td> <label for="MAT102H5FTUT0125">TUT0125</label> </td> 
       <td class="instrTD"> </td> 
       <td class="hideEnrolTD"> 29 </td> 
       <td class="hideEnrolTD"> 35 </td> 
       <td class="hideEnrolTD"> 0 </td> 
       <td class="enrolTD"> 29/35, wait:0 </td> 
       <td> <abbr title="Wednesday">WE</abbr><br> </td> 
       <td class="start_time"> 13:00<br> </td> 
       <td> 14:00<br> </td> 
       <td> MN 2100<br> </td> 
       <td class="noteTD"> </td> 
       <td class="text-right"> 
        <!-- <input type='checkbox' name='courses' id='$checkbox_id' value='MAT102H5F-TUT0125-313:0014:00' aria-label='MAT102H5F TUT0125' /> --> <button name="courses" id="MAT102H5FTUT0125" value="MAT102H5F-TUT0125-313:0014:00" onclick="addCourse($(this))" aria-label="MAT102H5F TUT0125" class="addButton btn btn-sm btn-primary"><span class="glyphicon glyphicon-plus"></span><span class="button-text"> Add to Plan</span></button> </td> 
      </tr> 
      <tr id="tr_MAT102H5FTUT0126" class=" TUT W1 meeting_section OL0 todAft"> 
       <td> </td> 
       <td> <label for="MAT102H5FTUT0126">TUT0126</label> </td> &lt;
      </tr>
     </tbody>
    </table>
   </div>
  </div>
 </body>
</html>

我期望最后一个 tr 标记代表页面中加载的最后一个表格,即类(class) WGS102H5S 而不是 MAT102H5F

不确定这是否是有用的信息,但我目前正在 android studio 中对此进行编程。

JSoup 中有解决这个问题的方法吗?如果没有,我应该使用更好的库吗?

最佳答案

关于java - JSoup 未完全渲染长页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495635/

相关文章:

java - 更改自定义组件 JTable 的 LookAndFeel

android - 禁用或隐藏控件设计指南?

java - 解析Google搜索结果错误

java - ArrayList 空指针异常

android - 增加文本大小会为 Android 中的文本添加额外的填充

java - Jsoup 解析 - Java

java - 有没有一种有效的方法来测试元素是否与 Jsoup 中的选择器匹配?

java - 在android中解析xml文件

JTable char[]、字符串和对象消耗 Java 堆空间

java - 是否可以使用 Integer.parseInt(String) 将我们通过 get string extra Intent 获得的字符串值转换为整数