我正在尝试抓一页:https://www.investing.com/equities/statoil-technical
我想要实现的是点击5分钟,15分钟,30分钟等等,并阅读点击后发生变化的Pivot Points表。
我尝试了很多不同的方法。 System.Windows.Forms.Browser,ChromiumWebBrowser(Cef)和现在使用JavaScript的ChromiumWebBrowser。
像这样:
script = " var ul = document.getElementById('pairSublinksLevel1'); " +
" var items = ul.getElementsByTagName('li'); " +
" var Financials = 0; " +
// Find and click the Financials Botton
" for (var o = 0; o < items.length; o++) " +
" { " +
" if (items[o].textContent = 'Financials') {" +
" Financials = o;}" +
" } " +
" items[Financials].click() ; " +
// should I set " setTimeout(function(){}, 3000); " ?
" var lis = document.getElementById('pairSublinksLevel1').getElementsByTagName('li'); " +
" var TechnicalAnalysis = 0; " +
// Find and click the Technical Analysis sub menu
" for (var o = 0; o < lis.length; o++) " +
" { " +
" if (lis[o].textContent = 'Technical Analysis') {" +
" TechnicalAnalysis = o;}" +
" } " +
" lis[TechnicalAnalysis].click();" +
// should I set " setTimeout(function(){}, 3000); " ?
// Get the bottons ( 5mins, 15mins, 30mins etc)
" var TimePeriods = document.getElementById('timePeriodsWidget').getElementsByTagName('li'); " +
" TimePeriods[5].click(); " +
// should I set " setTimeout(function(){}, 3000); " ?
" var x = document.getElementById('curr_table'); " +
" var xHTML= x.innerHTML ;";
var task = LocalBrowser.EvaluateScriptAsync(script, timeout);
task.Wait();
问题是当我将“TimePeriods [5] .click();”更改为按钮3或1或其他任何内容时,xHTML不会改变。
我在DOM中尝试过这个。我试过在浏览器中。 我被卡住了。
有人可以向我倾斜正确的方向吗? 向我展示如何点击LI:
<ul class="tabsBoxSubMenu techStudiesTabsSubMenu innerPage " id="timePeriodsWidget" data-view="normal">
<li pairid="376" data-period="300" class="first">
<li pairid="376" data-period="900" class="">
<li pairid="376" data-period="1800" class="">
<li pairid="376" data-period="3600" class="selected ">
<li pairid="376" data-period="18000" class="">
<li pairid="376" data-period="86400" class="">
<li pairid="376" data-period="week" class="">
<li pairid="376" data-period="month" class="">
</ul>
并获得
<table class="genTbl closedTbl crossRatesTbl" id="curr_table">
<thead>
<tr>
<th class="first left noWrap">Name</th>
<th class="noWrap">S3</th>
<th class="noWrap">S2</th>
<th class="noWrap">S1</th>
<th class="noWrap">Pivot Points</th>
<th class="noWrap">R1</th>
<th class="noWrap">R2</th>
<th class="noWrap">R3</th>
</tr>
</thead>
<tbody>
</table>
LI点击生成的代码?
由于 哈康
答案 0 :(得分:0)
问题是您尝试点击LI
元素,但加载表格和更改HTML的操作实际上是由A
的子LI
元素触发的
所以,像TimePeriods[5].children[0].click();
这样的东西可以胜任。
//我应该设置&#34; setTimeout(function(){},3000); &#34; ?
是的,您可以使用setTimeout
来延迟对表中数据的爬行或使用某种DOM更改检测技术,因为单击会触发AJAX调用,而表中的数据很可能不会立即可用。
无论如何,我必须建议你抓取politely,因为这个过程会使目标网站超载,甚至可能会产生法律影响。