我正在使用c#winforms和工具箱中的WebBrowser Control来定期导航到一个url并抓取其数据。我已将事件webbrowser_documentcomplete事件绑定,并且在事件中我使用了该行
element.OuterText.Trim()
获取元素。一旦我有了HtmlElement,我就可以使用OuterText属性来查看元素中的内容了
<input id="MainRadGrid_ClientState" name="MainRadGrid_ClientState" type="hidden" /> </div>
我的问题是,即使我正在查看的输入类型设置为“隐藏”,上面的代码也能正常工作。事情似乎在这一点上发生了变化,我不再能够获得outertext值。有人可以帮助我获得元素的outertext或者只是进入隐藏元素来获取其数据
public void CTRL_PDF_Clicked(object sender, ClickedEventArgs e)
{
// Write your code here.
bool exportDone = false;
//Declare variables
string fileName;
string fileLocation;
XPathNavigator nameNode;
XPathNavigator folderNode;
XPathNavigator timeNode;
//Set the values for each variable
nameNode = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:PDFName", NamespaceManager);
folderNode = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:FolderLocation", NamespaceManager);
fileName = nameNode.Value;
fileLocation = folderNode.Value;
//Do the work -- switch to the PDF view then export it as a PDF file.
Microsoft.Office.InfoPath.View currentView = this.CurrentView;
this.CurrentView.Export(@fileLocation + fileName + ".pdf", ExportFormat.Pdf);
//Now set up the values for SharePoint
string jobID = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:PostID", NamespaceManager).Value;
string formPT = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:Total_PT", NamespaceManager).Value;
string formBC = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:Total_BC", NamespaceManager).Value;
string formSRS = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:Total_SRS", NamespaceManager).Value;
string srsChoice = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:SRSOption", NamespaceManager).Value;
string engName = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:Engineer/my:Engineer_Company", NamespaceManager).Value;
// Now update the list item in SharePoint
XPathNavigator batch = DataSources["Post CAML"].CreateNavigator();
batch.SelectSingleNode("/Batch/Method/Field[@Name='ID']", NamespaceManager).SetValue(jobID);
batch.SelectSingleNode("/Batch/Method/Field[@Name='EstimatedFeet']", NamespaceManager).SetValue(formPT);
batch.SelectSingleNode("/Batch/Method/Field[@Name='BCEstFT']", NamespaceManager).SetValue(formBC);
//batch.SelectSingleNode("/Batch/Method/Field[@Name='SRSEst']", NamespaceManager).SetValue(formSRS);
batch.SelectSingleNode("/Batch/Method/Field[@Name='SRS']", NamespaceManager).SetValue(srsChoice);
batch.SelectSingleNode("/Batch/Method/Field[@Name='Engineer']", NamespaceManager).SetValue(engName);
string xmlPTEst = batch.SelectSingleNode("/Batch/Method/Field[@Name='EstimatedFeet']", NamespaceManager).Value;
string xmlBCEst = batch.SelectSingleNode("/Batch/Method/Field[@Name='BCEstFT']", NamespaceManager).Value;
string xmlSRSEst = batch.SelectSingleNode("/Batch/Method/Field[@Name='SRSEst']", NamespaceManager).Value;
string xmlSRSVal = batch.SelectSingleNode("/Batch/Method/Field[@Name='SRS']", NamespaceManager).Value;
WebServiceConnection wc = (WebServiceConnection)this.DataConnections["Web Service Submit"];
wc.Execute();
exportDone = true;
if (exportDone == true)
{
MessageBox.Show("Export Done. Click OK to continue.");
}
// End your code here.
}
答案 0 :(得分:1)
根据页面作者的难度,可能会有困难。
输入类型='隐藏'是一回事,但可能有其他字段在视觉上隐藏了CSS样式或只是放在屏幕上。最后,可能会有一些值在页面提交时在最后一秒组成,因此您必须深入思考您想要的值。此外,在加载页面后,可能会打开,生成或删除某些字段,从而无法进行简单的抓取页面抓取。
但是对于类型为hidden的输入标记,XSLT搜索可以非常快速地为您提供这些节点的列表。
答案 1 :(得分:0)
您没有说明您的搜索方式,但一般来说,您的问题的答案应该是响亮的&#34;是。&#34;如果您正在抓取网页内容,这意味着您要下载由网络服务器发送到任何浏览器的相同内容(HTML源等)。在你的刮刀中,你不需要尊重&#34;隐藏&#34;样式或任何类型的东西。对于您的代码,它只是一个非常大的字符串或一系列字符串。你可以根据自己的需要解析它们。