- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Jsoup 来废弃网页。 Jsoup 似乎没有捕获 <input
像 Chrome 那样的元素。
缺少如下值:
<input type="hidden" id="fileId" value="3168935269">
<input type="hidden" id="secondsLeft" value="20">
使用 Jsoup 我提取了这些元素:
<input type="hidden" class="jsItemDirId" value="yRg1N-QP" />
<input type="hidden" class="jsItemFileId" value="i-EbooI0" />
<input type="hidden" id="fbAppId" value="255519317820035" />
<input type="hidden" id="sPrefix" value="http://search.4shared.com" />
<input type="hidden" class="sLink file" value="/q/CCAD/1" />
<input type="hidden" class="sLink video" value="/q/CCQD/1/video" />
<input type="hidden" class="sLink music" value="/q/CCQD/1/music" />
<input type="hidden" class="sLink photo" value="/q/CCQD/1/photo" />
<input type="hidden" class="sLink games" value="/q/CCQD/1/game" />
<input type="hidden" class="sLink book" value="/q/CCQD/1/books_office" />
<input type="hidden" class="sLink featured_videos" value="/q/CCQD/1/video" />
<input type="hidden" id="sBreadcrumbsPhrase" value="Searching" />
<input type="text" id="searchQuery" placeholder="Search files" />
<input type="hidden" id="interval" value="600000" />
<input type="hidden" id="archiveReadyDownload" value="Your file is ready for download:" />
<input type="hidden" id="defAvatar" value="http://static.4shared.com/images/user2.png?ver=2906097813" />
<input type="hidden" id="zipAvatar" value="http://static.4shared.com/icons/32x32/zip.png?ver=655479399" />
<input type="hidden" id="b1Avatar" value="http://static.4shared.com/icons/32x32/b1.png?ver=703417425" />
<input type="hidden" id="torrentAvatar" value="http://static.4shared.com/icons/32x32/torrent.png?ver=1628575404" />
<input type="hidden" id="contactRequestText" value="Your friend $[p1] just joined 4shared." />
<input type="button" value="Ok" onclick="checkAndStartDownload(event);" style="width:80px" />
<input type="button" value="Cancel" onclick="hideTermsOfUse();" />
<input type="hidden" id="startTitle" value="Share" />
<input type="hidden" id="sharingFolderTitle" value="Share folder" />
<input type="hidden" id="sharingFileTitle" value="Share file" />
<input type="hidden" id="placeHolderEnterEmailAdresses" value="Enter names or e-mail addresses" />
<input type="hidden" id="dLinkPay" value="Direct link is available only for Premium Users.<br> Sign Up to premium account to get all 4shared Premium Features." />
<input type="hidden" id="premiumRequired" value="Premium account required!" />
<input type="hidden" id="hosted" value="Hosted at" />
<input type="hidden" id="fbInviteFolderTitle" value="I've shared a folder with you on 4shared. Find out what it is!" />
<input type="hidden" id="fbInviteFileTitle" value="I've shared a file with you on 4shared. Find out what it is!" />
<input type="hidden" id="contacts" value="Contacts" />
<input type="hidden" id="fb_share_folder_img" value="http://static.4shared.com/images/facebook/share_folder.png?ver=2422162001" />
<input type="hidden" id="fb_share_file_img" value="http://static.4shared.com/images/facebook/share_file.png?ver=1565381062" />
<input type="hidden" id="fb_redir_param" value="https://www.4shared.com/servlet/signin/facebook?fp=https://www.4shared.com/account/home.jsp" />
<input type="hidden" id="fileSuccessfullSent" value="Your file was successfully sent" />
<input type="hidden" id="folderSuccessfullSent" value="Your folder was successfully sent" />
<input type="hidden" id="fbRequestSharedText" value="I'd like to share $[p0] with you" />
<input type="hidden" id="fbSharingOff" value="null" />
<input type="hidden" id="fbInviteText" value="4shared.com - free web-based file sharing and storage." />
<input type="radio" class="readFlag" name="permissions" value="read" checked="checked" />
<input type="radio" class="writeFlag" name="permissions" value="write" />
<input class="lucida dark-gray selectable" id="simpleViewLink" type="text" readonly="readonly" />
<input type="text" id="emails" class="lucida f12 dark-gray tags gaClick" data-element="shF-2-1" name="emails" tabindex="3" />
<input type="radio" class="readFlag" name="permissions" value="read" checked="checked" />
<input type="radio" class="writeFlag" name="permissions" value="write" />
<input type="text" id="downloadFileLink" class="lucida f12 selectable" name="" tabindex="3" />
<input type="text" class="lucida f12 dark-gray selectable" name="" tabindex="4" value="" id="premiumDirectLink" />
<input type="text" class="lucida f12 selectable" id="fileHTMLembed" name="" tabindex="3" />
<input type="text" id="fileForumEmbed" class="lucida f12 selectable" name="" tabindex="4" />
<input type="text" class="lucida f12 selectable" id="fileEmbed" tabindex="5" />
<input class="lucida f12 dark-gray selectable" id="searchFriendsInput" type="text" placeholder="Search by name or e-mail address" />
<input id="tags_2" type="text" class="tags" />
<input type="radio" class="readFlag" name="permissions" value="read" checked="checked" />
<input type="radio" class="writeFlag" name="permissions" value="write" />
<input type="radio" class="readFlag" name="permissions" value="read" checked="checked" />
<input type="radio" class="writeFlag" name="permissions" value="write" />
<input type="text" class="lucida f12 ffshadow dark-gray" name="" tabindex="4" value="" id="subdomainInput" />
<input type="text" class="lucida f12 ffshadow dark-gray" name="" tabindex="3" value="" id="subdomainValue" readonly="true" />
<input type="hidden" id="allreadyPasswordProtectedMess" value="You can't set password for this folder, because the parent folder '$[1]' is password protected." />
<input type="hidden" id="passwordChangeConfirmTitle" value="Password Change" />
<input type="hidden" id="passwordChangeConfirmBody" value="Some child directory already password protected. <br/> Changing password of current directory will cause password overwrite on children's " />
<input type="hidden" id="confirmButtonMsg" value="Change" />
<input type="hidden" id="cancelButtonMsg" value="Cancel" />
<input type="text" class="passInput lucida f12" name="" tabindex="4" value="" id="passwordInput" />
<input type="password" class="passInput lucida f12" name="" tabindex="4" value="" id="changePasswordInput" readonly="true" />
<input type="hidden" id="previewLinkForEmbed" />
<input type="hidden" id="previewLinkForWidget" />
<input class="lucida f12 dark-gray" id="widget_width" type="text" style="width:30px;" />
<input class="lucida f12 dark-gray" id="widget_height" type="text" style="width:30px;" />
<input type="text" class="lucida f12 dark-gray selectable" name="" tabindex="3" id="htmlEmbed" />
<input type="text" class="lucida f12 dark-gray selectable" name="" tabindex="4" id="forumEmbed" />
<input type="text" value="http://www.4shared.com/android/i-EbooI0/batman_hd.html" readonly="readonly" onclick="this.focus();this.select()" class="field1 gaClick" data-element="16" dir="ltr" />
<input type="text" value="<a href="http://www.4shared.com/android/i-EbooI0/batman_hd.html" target=_blank>batman hd.apk</a>" readonly="readonly" onclick="this.focus();this.select()" class="field1 gaClick" data-element="17" dir="ltr" />
<input type="text" value="[URL=http://www.4shared.com/android/i-EbooI0/batman_hd.html]batman hd.apk[/URL]" readonly="readonly" onclick="this.focus();this.select()" class="field1 gaClick" data-element="18" dir="ltr" />
<input type="hidden" name="showComments" value="true" />
<input type="hidden" name="showPart" value="commentList" />
<input type="hidden" name="replyId" value="" />
<input type="hidden" id="norecaptcha" name="norecaptcha" value="" />
<input type="hidden" name="start" value="0" />
<input id="submitCommBtn" type="submit" value="Add New Comment" class="gaClick floatLeft f11 marginT10 round4 lucida no-line sendCommentButton" data-element="32" />
<input type="text" class="input-gray-big wide round4" id="recaptcha_response_field" name="recaptcha_response_field" style="width:250px" />
<input class="field2" id="submitCommBtn" type="submit" value="Confirm" />
<input type="text" name="fileName" value="4shared" class="xBox" />
<input type="hidden" name="newValue" value="" />
<input type="hidden" name="mode" value="" />
<input type="hidden" name="fid" value="3168935269" />
<input type="hidden" name="mode" value="3" />
<input type="hidden" name="fid" value="3168935269" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatLeft marginR10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12 floatLeft" onclick="quickEditCancel(1)" />
<input type="hidden" name="mode" value="3" />
<input type="hidden" name="fid" value="3168935269" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatLeft marginR10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12 floatLeft" onclick="quickEditCancel(1)" />
<input type="hidden" name="mode" value="3" />
<input type="hidden" name="fid" value="3168935269" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatLeft marginR10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12 floatLeft" onclick="quickEditCancel(1)" />
<input type="text" name="newValue" class="xBox" style="width:200px" />
<input type="hidden" name="mode" value="2" />
<input type="hidden" name="fid" value="3168935269" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatLeft marginR10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12" onclick="quickEditCancel(1)" />
<input type="text" name="newValue" class="xBox" style="width:330px" onkeypress="return quickEditIsValidCharForFileName(event);" />
<input type="hidden" name="mode" value="10" />
<input type="hidden" name="fid" value="3168935269" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatRight marginL10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12 floatRight" onclick="quickEditCancel();" />
<input type="hidden" name="mode" value="3" />
<input type="hidden" name="did" value="0" />
<input type="submit" value="Save" class="bluePopupButton marginT15 round5 f12 floatLeft marginR10" />
<input type="button" value="Cancel" class="grayPopupButton marginT15 round5 f12 floatLeft" onclick="quickEditCancel(1)" />
<input type="text" name="searchName" style="width:250px;padding:1px 0" class="ajax-suggestion field gaClick" data-element="fs1" autocomplete="off" />
<input type="submit" name="submitButton" value="Search" class="button gaClick" data-element="fs3" />
<input type="hidden" name="searchmode" value="2" />
使用 try.jsoup.com 也没有像 Chrome 那样产生这些输入类型,这表明这不是我的代码,而是 Jsoup。
阅读其他线程表明 JavaScript 可能会在加载网页后更改 html。关于如何解决这个问题没有可行的答案。
我做错了什么以及如何解决它?
这是我获取完整 html 页面的代码:
Document doc = Jsoup.connect("http://www.4shared.com/get/i-EbooI0/batman_hd.html").timeout(0).get();
System.out.println(doc.toString() + "\n\n\n\n");
Elements links = doc.select("input[type=hidden]");
for (org.jsoup.nodes.Element link : links) {
System.out.println(link);
}
在此处查看所需值的屏幕截图
解决方案
Connection.Response response = Jsoup.connect("myUrl")
.method(Connection.Method.GET)
.execute();
Document homePage = Jsoup.connect("myUrl")
.cookies(response.cookies())
.get();
此处描述的代码的修改版本:Jsoup Cookies for HTTPS scraping 。这会按照 Niranjan 的建议获取 cookie,然后重新连接到您的网址。
最佳答案
Jsoup
将清理您的HTML
解析时的内容,它也可以处理您的 HTML
虽然它的格式不正确。尝试在解析后转储 html,即 Document.html()
并检查转储,如果您丢弃的元素符合您的select
条件条款。
来吧,试试这个,如果有效的话我会向你解释!!
public static void main(String[] args) throws IOException
{
try
{
Map<String, String> cookieMap = new HashMap<String, String>();
cookieMap.put("day1host", "h");
cookieMap.put("d1.loginity.mark", "1");
cookieMap.put("hostid", "-1314014314");
cookieMap.put("__qca", "P0-2042580316-1371938383086");
cookieMap.put("cd1v", "OOhB");
cookieMap.put("c29", "1");
cookieMap.put("__utma", "210074320.280144312.1371938377.1371938377.1371938377.1");
cookieMap.put("__utmb", "210074320.4.10.1371938377");
cookieMap.put("__utmc", "210074320");
cookieMap.put("__utmz", "210074320.1371938377.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)");
Document document = Jsoup.connect("http://www.4shared.com/get/i-EbooI0/batman_hd.html")
.userAgent("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36")
.followRedirects(true)
.cookies(cookieMap)
.get();
//System.out.println(document.html());
//System.out.println("====================================================================");
Elements elements = document.select("input[type=hidden]");
for (Iterator<Element> iterator = elements.iterator(); iterator.hasNext();)
{
Element element = iterator.next();
System.out.println(element);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
我不确定以下模式是否对于所有 URL
都相同你正在尝试。
这就是网站的响应方式。
有一个来自 /get/i-EbooI0/batman_hd.html
的站点重定向至android/i-EbooI0/batman_hd.html
。重定向时,它会发送 2 个 cookie 来响应第一个请求。
第二次请求时会添加一些 Cookie。
<body>
中没有隐藏字段然而。通过查看 Elements
来确认这一点选项卡。
现在请求http://www.4shared.com/get/i-EbooI0/batman_hd.html
在浏览器中。
现在您已获得所需的 Hidden fields
在 < body>
.
<小时/>Im performing
Step 3
directly in the code.
If you observe the same behavior for other
URL
's as well then you have to write the code to catch thecookies
of aResponse
and then pass them in the subsequentRequest
until you get the desiredHidden fields
.
关于java - <使用 Jsoup 解析 html 时缺少输入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253567/
我有一些像这样的 html: zip code 我的 Java 代码 Elements formElements = doc.getElementsByTag("form"); for(Ele
我无法使用 创建 session jsoup 以及如何使用 jsoup 发布数据.请帮助我,我是新来的 jsoup api ,实际上我的代码是: Connection.Response res = J
我想添加一个新的元标记 Document doc = Jsoup.parse(.....) doc.select("meta").first.appendElement("meta".attr("na
有没有办法用 Jsoup 保留新行,(不是 )? Document pdsc = Jsoup.connect("http://drafts.bestsiteeditor.com/promoters/d
我需要将 jsoup 元素映射回源 HTML 中的特定字符偏移量。换句话说,如果我有这样的 HTML: Hello World 我需要知道“Hello”从偏移量 0 开始,长度为 6 个字符,从偏移
我喜欢用 Jsoup 解析 html,但是他们的连接有问题,我需要将请求发送到同一个网站但不同的查询参数,比如“id=XXX”,请求是这样的: http://website/?id=XXX 我不想为每
我有代码,有点像这样 String str = " >foo< "; Document doc = Jsoup.parse(str, "", Parser.xmlParser()); 但
是否可以使用 jsoup 来验证 HTML 片段?我想知道标记是否格式错误,而不是让 jsoup 自动修复它,我希望能够通知用户自己修复源标记。 最佳答案 Jsoup 不是检查 xml 或 html
Jsoup 有 2 个 html parse() 方法: > parse(String html) - "由于没有指定基本 URI,绝对 URL检测依赖于包含标记的 HTML。” > parse(St
我正在尝试使用 jsoup 从此网页中提取所有图片网址?任何人都可以提供有关如何做到这一点的帮助吗?所有标签的格式都是这样的,但我只需要 src 图像,而不是 ajaxsrc: 链接在这里: htt
我试图找到所有 或 一页/文档中的标签。 我如何使用 OR运算符(operator)在 doc.select("div.name1 OR div.name2") ? 最佳答案 select metho
我为我的项目创建了一个新模块来添加一些额外的功能。在该模块中,我在模块的 Gradle 文件 implementation 'org.jsoup:jsoup:1.10.2' 中添加了 Jsoup 依赖
我正在寻找这个 div 中的主图像 我试过这个: Document document = Jsoup.connect(url).get(); Elements img = document.se
谁能解释一下 JSoup 中提供的 Element 对象和 Node 对象之间的区别? 在什么情况/条件下使用什么最好。 最佳答案 节点是 DOM 层次结构中任何类型对象的通用名称。 元素是一种特定类
有什么方法可以防止 Jsoup 的 HTML 解析器将单个标签(最具体的是 标签)转换为自闭合标签? 标签是有效的 HTML5 元素,但 Jsoup 一直将它们转换为 . 我在下面的链接中有一个示
可以屏蔽吗 Jsoup.connect("http://xyz.com").get().html(); 作为对网站的浏览器调用? 我尝试构建一个壁纸下载工具,但在从服务器下载页面时遇到问题。 如果我下
我希望在 Groovy 中开发一个网络爬虫(使用 Grails 框架和 MongoDB 数据库),它能够爬取网站,创建网站 URL 列表及其资源类型、内容、响应时间和所涉及的重定向数量。 我正在讨论
如果我有一个看起来像这样的元素: bar text 1 bar text 2 我已经有了 元素被选中,我想选择 元素是 的直接子元素但不是
任何人都可以提供有关我将如何解析超大 HTML 流/文件的指针或建议。例如,我有一个大约有 270,000 行的表,我想一次将它带入我的应用程序大约 20,000 行。 jsoup 解析方法允许使用
我收到此错误: java.lang.RuntimeException: An error occured while executing doInBackground() at and
我是一名优秀的程序员,十分优秀!