因为原因,我正试图通过使用Selenium / PhantomJS来解析DOM。 它工作但它很慢,我不知道为什么。 Findelements每次似乎需要大约250ms。
我已经尝试将隐含等待归零并没有太大成功。我也试过使用Xpath而没有真正的改变。
这是代码,有什么建议吗?
public static void RecurseDomFromTop()
{
DomRecursor( pjsDriver.FindElement( By.TagName( "*" ) ) );
}
public static void DomRecursor( IWebElement node )
{
ReadOnlyCollection<IWebElement> iwes = node.FindElements( By.TagName( "*" ) );
foreach (IWebElement iwe in iwes)
{
DomRecursor( iwe );
}
}
答案 0 :(得分:1)
你用这种方式比较两个dom的方法是错误的。每次发出Selenium请求时,都会创建一个发送给驱动程序的HTTP请求,驱动程序将其发送到浏览器,然后浏览器将其发送回驱动程序和驱动程序,返回给您语言绑定。这涉及很多开销。
相反,您应该使用let contact = CNMutableContact()
contact.namePrefix = data["firstName"] as! String
contact.nameSuffix = data["lastName"] as! String
contact.organizationName = data["company"] as! String
contact.jobTitle = data["jobTitle"] as! String
let address = CNMutablePostalAddress()
address.street = data["street"] as! String
address.city = data["city"] as! String
address.state = data["state"] as! String
address.postalCode = data["zipcode"] as! String
address.country = data["country"] as! String
let labeledAddress = CNLabeledValue<CNPostalAddress>(label: CNLabelHome, value: address) //<- You can create other `CNLabeledValue<CNPostalAddress>`s with other `CNLabelXxxx`s or your custom label.
contact.postalAddresses = [labeledAddress]
并在一次调用中获取整个HTML响应。之后您可以使用HTML解析库,它比您现在采用的方法快至少10倍。
请看下面使用HtmlAgilityPack获取DOM数据的文章
https://www.codeproject.com/Articles/659019/Scraping-HTML-DOM-elements-using-HtmlAgilityPack-H