Jsoup POST:定义返回 HTML 的选定选项?

2023-12-20

我正在尝试生成一个 HTML 帖子到一个包含选项列表的页面。有一个下拉列表,用户可以在其中选择一个项目,然后单击生成按钮。根据所选的选项,它会返回不同的结果。我对前后的 HTML 进行了比较,可以看到差异如下:

Before

<option value="Option1">Option 1</option>
<option value="Option2">Option 2</option>
<option value="Option3">Option 3</option>

After

<option value="Option1">Option 1</option>
<option selected="selected" value="Option2">Option 2</option>
<option value="Option3">Option 3</option>

我无法弄清楚 jsoup 文档生成的语法。到目前为止我已经有了这个,但它只是不断返回原始 HTML 而没有结果:

doc = Jsoup.connect("MYurl...")
.timeout(5000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.cookie("auth", "token")
.data("selected", "Option2")
.post();

您必须使用数据来设置字段的值by its name属性.

当您使用:

.data("selected", "Option2")

与请求页面上有此元素相同form(注意name="selected"):

<select name="selected">
    <option value="Option1">Option 1</option>
    <option selected="selected" value="Option2">Option 2</option>
    <option value="Option3">Option 3</option>
</select>

所以,你正在尝试的方式POST是正确的。事情可能是名为的参数(字段)selected不存在于form(您正在尝试模仿),因此发送它与不发送任何内容相同。

在您的评论后编辑:

我真正需要做的是在解析之前单击网页元素,据我所知,这不能用 Jsoup 来完成。

你是对的。 Jsoup 不支持这一点 - 单击可能会产生多种副作用,例如 JavaScript 事件等。处理它们是一件大事。

不过,对于您的具体情况,jsoup 更改 DOM 的功能可能很有用。检查下面的示例。在其中我们通过显式设置它来“选择”一个选项selected属性为selected(并将其从所有其他选项中删除)。

import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.*;

public class JSoupChangeDom {
    public static void main(String[] args) {
        Document doc = Jsoup.parse(""+
        " <html><body>                                            " +
        " <div>example</div>                                      " +
        " <form>                                                  " +
        "    <select name='mySelect'>                             " +
        "       <option value='Option1'>Option 1</option>         " +
        "       <option value='Option2'>Option 2</option>         " +
        "       <option value='Option3'>Option 3</option>         " +
        "    </select>                                            " +
        " <form>                                                  " +
        " </body></html>                                          ");
        Element mySelect = 
                      doc.getElementsByAttributeValue("name", "mySelect").get(0);
        String optionValueToBeSelected = "Option2";
        Elements options = mySelect.getElementsByTag("option");
        for (Element option : options) {
            if (option.attr("value").equals(optionValueToBeSelected)) {
                option.attr("selected", "selected");
            } else {
                option.removeAttr("selected");
            }
        }
        System.out.println(doc);
    }
}

Output:

<html>
    <head></head>
    <body>
        <div>example</div>
        <form>
            <select name="mySelect">
                <option value="Option1">Option 1</option>
                <option value="Option2" selected="selected">Option 2</option>
                <option value="Option3">Option 3</option>
            </select>
        </form>
    </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jsoup POST:定义返回 HTML 的选定选项? 的相关文章

随机推荐

  • Joomla 文章页面:检查已发布与否的代码

    我正在文章页面中寻找 php 代码来检查文章是否已发布 我试过这个 但它是假的 if listing 列表 已发布 1 有人能给我一些提示吗 多谢 PS Joomla 1 7 3 JReviews 2 3 使用Joomla默认内容结构 尝试
  • 使用python在多个文件中进行多个正则表达式替换[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个项目 需要使用 python
  • 使用 Process.Start 和 UAC 在 .NET 中模拟

    我正在尝试从另一个 NET 程序运行程序 该程序需要使用 Process Start System Diagnostics 方法的模拟选项进行提升 用于模拟的用户是本地管理员 操作系统是2008年 UAC已开启 每当调用进程启动时 我都会收
  • 将 stargazer 与内存贪婪的 glm 对象一起使用

    我正在尝试运行以下回归 m1 glm y x1 x2 x3 x4 data df family binomial m2 glm y x1 x2 x3 x4 x5 data df family binomial m3 glm y x1 x2
  • PhpMyAdmin 自动刷新 MySQL 表

    当我在 phpmyadmin 本地页面中运行更新或选择查询时 我会通过 GO 按钮弹出表格结果 但是 为了使用服务器中的 php 文件 我必须使用刷新按钮来查看表上新传入的数据 创建视图没有帮助 或者我可能会丢失某些内容 我怎样才能像自动刷
  • 如何获取配置标志的值?

    有没有办法获得a的值配置标志 https doc rust lang org reference html conditional compilation 例如 我想获取以下值target os as str String 不诉诸以下方法i
  • MySQL:写入从节点

    假设我有一个汽车数据库 我有品牌和型号 FK 到品牌 我计划让用户跟踪他们的汽车 每辆车都有一个 FK 型号 现在 我有很多用户 我想拆分数据库来分配负载 品牌和型号表变化不大 但它们需要跨分片共享 我的想法是使用 MySQL 从品牌和型号
  • 如果我没有关闭 PHP 标签,Notepad++ 函数列表 PHP 将无法工作

    我想在我的 PHP 代码中使用 notepad 的函数列表功能 实际上 如果我编写关闭 PHP 标签 gt 则函数列表可以正常工作 但是如果我没有关闭 PHP 标签 则函数列表将无法工作 我只是想 即使我没有关闭 PHP 标签 函数列表仍然
  • Ajax表单提交,文件未提交

    我正在尝试为我的 Django 表单实现 AJAX 表单提交 这些文件是在没有 AJAX 的情况下提交的 因此服务器端的逻辑似乎可以正常工作 使用ajax 除了文件之外的其余值都会被提交 这是我正在实现的代码 AJAX表单提交 functi
  • XPS 文件的结构是什么

    我认为 XPS 文件就像 PDF 文件 但是 XPS 文件的结构是什么 类似于 PDF 文件吗 CNET 上的 XPS 与 PDF http reviews cnet com 4520 3672 7 6673717 2 html Excer
  • 自定义键盘出现约 5 秒延迟

    我正在使用 objc Xcode 7 制作自定义键盘 尝试了 6 次 问题是键盘加载速度太慢 我尝试加载完全空的UIInputViewController的观点 没有变化 我没有xib 没有大量资源 如果有人知道这个问题的任何解决方案 请写
  • 更新 Javascript 2D 数组中的元素会更新整个列[重复]

    这个问题在这里已经有答案了 我在 Javascript 中创建了一个 2D 数组 4x4 如下所示 let visited new Array 4 fill new Array 4 fill false console log visite
  • Xcode 中的垂直突出显示(列选择)

    如何在 Xcode 中突出显示矩形选区 按住 Option 键的同时单击并拖动 进行垂直突出显示 块选择时 应用正常的复制和粘贴规则 command c 和 command v
  • 如何禁用 Dexguard?

    我浏览了文档 寻找如何在运行 gradle 时禁用 dexguard 但保留插件 dexguard 我尝试修改 proguardFilegetDefaultDexGuardFile dexguard debug pro 什么也不做 但不幸的
  • 键盘关闭时的背景故障

    我面临着我的片段布局 xml 有点复杂的情况 所以层次结构如下 相对布局 无背景 ScrollView fillViewPort true 滚动条 none FrameLayout 无背景 LinearLayout 无背景 Relative
  • 如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态

    我是颤振新手 我对小部件的状态没有正确的了解 我正在创建一个应用程序 在其中从主屏幕向购物车添加一些商品 然后单击 Cartbutton 我打开 ModalBottomSheet 用户还可以在其中修改其购物车商品 以及当用户关闭 Modal
  • 在 jekyll 中生成针对 github 页面的类别页面

    我正在尝试使用 jekyll 为我的 github 页面博客生成类别页面 当我在本地运行时使用jekyll serve这有效 因为它可以使用我的插件 使用这个例子从文档 https jekyllrb com docs plugins gen
  • IIS6 - 为什么我的自定义错误页面不显示?

    我有一个应该显示 HTTP 404 错误的自定义错误页面 事实并非如此 我很难弄清楚为什么 我的 web config 已设置
  • imap:从 C++ 程序发送电子邮件时“无法创建可选择的 TCP 套接字”

    我正在尝试使用 imap 库从 C 程序发送电子邮件 我有一个 Google Apps 和一个要向其发送电子邮件的 Gmail 帐户 每当程序无法发送电子邮件时 我都会将错误记录到文件中 我将程序设置为循环运行以发送电子邮件 有时 我收不到
  • Jsoup POST:定义返回 HTML 的选定选项?

    我正在尝试生成一个 HTML 帖子到一个包含选项列表的页面 有一个下拉列表 用户可以在其中选择一个项目 然后单击生成按钮 根据所选的选项 它会返回不同的结果 我对前后的 HTML 进行了比较 可以看到差异如下 Before