我正在开发一个应用程序,它将使用Java中的htmlunit自动单击网页上的按钮.唯一的问题是该按钮是一个javascript按钮,因此标准的getInputByName()将不起作用.处理这个的任何建议?该按钮的代码包含在下面.
<a class="vote_1" id="1537385" href="/javascript%3Avoid%280%29/index"><img src="/images/parts/btn-vote.gif" alt="Btn-vote" /></a>
Run Code Online (Sandbox Code Playgroud)
另外,这是投票的其他代码.
<div id="content"><script type="text/javascript" src="/js/scriptFeeds/voteArticle.js"></script>
Run Code Online (Sandbox Code Playgroud)
这导致以下javascript:
var pressed = new Array();
$j(document).ready(function() {
var nr = $j("input#number_of_articles").val();
for(var i=1; i<=nr; i++){
$j("a.vote_"+i).click(function(){
var article = $j(this).attr("id");
$j('#'+article).hide();
if (!pressed[article]) {
pressed[article] = "yes";
jQuery.post('/vote-article', {
_token: $j("#_token").val(),
article_id: article
},function(data) {
$j("span.numberOfVotes_"+data.id).html(data.votes);
}, "json");
}
return false;
});
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试在以下 URL 上执行 JavaScript:http://steamcommunity.com/id/bobcatchris/inventory#730。我可以使用 google chrome 通过按 ctrl+shift+j 打开控制台并粘贴以下脚本来完成此操作:
var list = [];
var size = Object.keys(g_ActiveInventory.rgInventory).size();
var counter = 0;
while (counter < size) {
list.push(g_ActiveInventory.rgInventory[Object.keys(g_ActiveInventory.rgInventory)[counter]].market_name);
counter +=1;
}
Run Code Online (Sandbox Code Playgroud)
它返回: 150 然后在下一行中,我写:>list
它返回一个长度为 150 的数组。
当我尝试这样做时HtmlUnit:
public static void main(String[] args) throws IOException {
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_17);
HtmlPage page=webClient.getPage("http://steamcommunity.com/id/bobcatchris/inventory#730");
String script="var list = [];\n" +
"\n" +
"\n" +
"var size = Object.keys(g_ActiveInventory.rgInventory).size();\n" +
"\n" +
"\n" +
"\n" +
"var counter = 0;\n" …Run Code Online (Sandbox Code Playgroud) 我知道HtmlUnit模拟浏览器,而HttpClient不是.
在HtmlUnit,当一个页面加载并且里面有一个JavaScript时,脚本会被执行吗?如果脚本设置了cookie,cookie是否会在HtmlUnit浏览器中设置并可从Java代码访问?
有没有什么可以使用HttpClient,但不能使用HtmlUnit?在HtmlUnit,我们可以从POST请求开始并修改HTTP请求的任何部分,包括方法,URI,HTTP版本,标题和正文吗?
有什么优势HttpClient了HtmlUnit?
我想在 HtmlPage 中找到包含“日期”一词的类的任何元素。
即我想匹配以下任何一项:
<div class = 'date'> August 13 2017 </div>
<span class = 'pubDate'> August 12 2017 </div>
<div class = 'datePublished'> August 10 2017 </div>
Run Code Online (Sandbox Code Playgroud)
为了完全匹配“日期”,我使用以下内容:
HtmlPage page;
List<HtmlDivision> date = page.getByXPath("//div[@class='date']");
System.out.println(date.get(0));
Run Code Online (Sandbox Code Playgroud)
哪个工作正常。
但是,我如何更改它(或者我应该使用其他什么),以便能够匹配具有包含单词 date(不区分大小写)的类名的任何元素?
我通过http协议访问svn存储库.当我将URL放入Internet Explorer时,它会提示我输入用户名/密码的对话框,然后在浏览器中正确加载文件.
我需要做的是从这个svn存储库下载来自不同标签的大量文件.我试图使用HtmlUnit自动下载这些文件.不幸的是,它给了我"401 Authorization Required ..."错误.我不知道如何在我的HtmlUnit测试中设置用户ID /密码信息.
请一位善良的灵魂帮助我吗?
我正在使用HtmlUnitDriver打开一个链接.这是我的代码:
HtmlUnitDriver webDriver = new HtmlUnitDriver();
webDriver.get("some url here");
Run Code Online (Sandbox Code Playgroud)
但我得到以下例外.
Caused by: com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function aa in object [object Object]. (https://apis.google.com/_/apps-static/_/js/gapi/plusone/rt=j/ver=use0LfpKko4.en_US./sv=1/am=!CVDWKorrwvOYBs7wcQ/d=1/rs=AItRSTMxl0wiQySaT0IYW5gyOkdlVL9A6A/cb=gapi.loaded_0#3)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:973)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
at …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("http://www.myland.co.il/%D7%9E%D7%97%D7%A9%D7%91-%D7%94%D7%A9%D7%A7%D7%99%D7%94");
Run Code Online (Sandbox Code Playgroud)
代码失败,出现com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException:404找不到http://www.myland.co.il/Scripts/swfobject_modified.js
我确实在控制台输出中看到了我感兴趣的HTML页面.有没有办法来抑制异常并获得一个Html页面呢?该页面在真实浏览器中正确加载.
在解析html页面时,我有两个问题(实际上是问题)HtmlUnit.我尝试了他们的"入门"以及搜索谷歌但没有帮助.这是我的第一个问题.
1)我想bold从页面中提取以下标签的文本
<b class="productPrice">Five Dollars</b>
Run Code Online (Sandbox Code Playgroud)
2)我想在以下结构的最后一段中提取整个文本(包括进一步的跨度或链接文本,如果存在)
<div class="alertContainer">
<p>Hello</p>
<p>Haven't you registeret yet?</p>
<p>Registrations will close on 3 July 2012.<span>So don't wait</span></p>
</div>
Run Code Online (Sandbox Code Playgroud)
你可以请一行代码片段我该怎么做?我是HtmlUnit的新手.
编辑:
HtmlUnit的getElementByName()和getElementById(),所以我们如何使用,如果我们想用类选择?
这将是我的第一个问题的答案.
我着迷于机器人。您知道,通常它使我们的工作变得容易,对于Web,一旦在网络服务器上初始化了我们的机器人,您就无需走到链接的任何地方。
让我们来回答我们的主要问题:
Robot Framework..的确切用途是什么。我擅长Java,但不擅长Python。我可以在Java中使用它吗?用于什么目的Robot Framework?
我擅长HTMLUnit。但是它可以用于解析HTML源代码,我们也可以在Java中实现它以生成源代码。但是呢Robot Framework?
我用谷歌搜索了2个小时,但找不到确切答案。如果您想了解我的任何信息,请告诉我。
我正在使用HTMLUnit并且想使用代理服务器.我对此并不太了解,但我的印象是http://proxylist.hidemyass.com/上列出的其中一台服务器可以使用.
这是我的代码:
public class App {
public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31, "61.234.249.126", 8118);
HtmlPage page = webClient.getPage("http://www.google.com");
webClient.close();
System.out.println(page.asText());
}
}
Run Code Online (Sandbox Code Playgroud)
从这样的列表中随机选择了IP和端口 - 就像我和其他几个一样.
但它最终说它超时了.我想并不是所有的代理服务器都能正常工作,但我已经用十几个地址完成了这个,所以我开始怀疑它是我的代码而不是服务器本身的问题.
我这样做了吗?
htmlunit ×10
java ×9
javascript ×2
web-scraping ×2
httpclient ×1
proxy ×1
python ×1
selenium ×1
url ×1