2016-10-17 14 views
0

こんにちは、XpathとSeleniumを使ってFacebook内のすべての友達をフェッチしようとしています。問題は、すべての友だちを空リストに戻すときです。XpathとSeleniumを使用したアイテムのリスト

using System; 
using System.Collections.Generic; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 



namespace Automation 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      using (IWebDriver driver = new FirefoxDriver()) 
      { 
       driver.Navigate().GoToUrl("https://mbasic.facebook.com"); 

       IWebElement username = driver.FindElement(By.Name("email")); 
       username.SendKeys("email"); 

       IWebElement password = driver.FindElement(By.Name("pass")); 
       password.SendKeys("password"); 

       IWebElement submit = driver.FindElement(By.Name("login")); 
       submit.Submit(); 


       var waitHomePage = new WebDriverWait(driver,TimeSpan.FromSeconds(10)); 
       waitHomePage.Until(ExpectedConditions.ElementExists(By.PartialLinkText("Chat"))); 

       IWebElement chat = driver.FindElement(By.XPath(".//*[@id='header']/div/a[6]")); 
       //driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); 
       chat.Click(); 

       IList<IWebElement> friends = chat.FindElements(By.ClassName("m br bs")); 
      } 
     } 
    } 
} 

Friends.Count return 0。ここで

は友人のHTMLは、私の知る限り、あなたのコード内のいくつかのミスを持っている(とHTMLあなたは提供が完全でないわけではない見ることができるようにリストに

<div class="bo bp bq"> 
 
<table class="m br bs"> 
 
<tbody> 
 
<tr> 
 
<td class="t bt"> 
 
<a class="bu" href="/messages/read/?fbid=100002640428096&click_type=buddylist#fua">Friend Name</a> 
 
</td> 
 
<td class="n bv"> 
 
<img class="bw bx s" src="https://fbstatic-a.akamaihd.net/rsrc.php/v3/yo/r/DbsprgIuYE0.png" width="7" height="14"/> 
 
</td> 
 
</tr> 
 
</tbody> 
 
<table class="m br bs"> 
 
<table class="m br bs"> 
 
<table class="m br bs"> 
 
</div> 
 
</div>

答えて

1

チャットですその中の任意の情報)。

私は

IList<IWebElement> friends = chat.FindElements(By.ClassName("m br bs")); 

を経由してお友達を検索しようと思いますが、この場合、あなたが見る、aタグにreferes chatオブジェクトを使用している:

IWebElement chat = driver.FindElement(By.XPath(".//*[@id='header']/div/a[6]")); 

ので、私が使用しますchatオブジェクトの代わりにdriver(あなたのケースではchatが返すものはわからないので)。

さらに、HTMLサンプルには何も情報(空のテーブル)が含まれていないClassNameを検索して、友人の数を見積もっています。私はそれを自分自身で調べようとしましたが、難しいのはFBがunquie IDsをそのテーブルに使用していないことです。

:ので、私は、XPathを持つユーザーを見つけるために、この情報を使用しようとした... FBは、各連絡先の click_type=buddylisthrefタグを使用しているようです

<table class="l bs bt"> 
    <tbody> 
    <tr> 
     <td class="s bu"> 
     <a class="bv" href="/messages/read/fbid=111&amp;click_type=buddylist#fua">Someuser1</a> 
    </td> 
     <td class="m bw"><img src="https://blabla" width="7" height="14"class="bx by r" /></td> 
    </tr> 
    </tbody> 
</table> 

:私のブラウザではfriendlistは、次のようになります

.//*[contains(@href,'buddylist')] 

ので、あなたはそれが私の作品

IList<IWebElement> friends = driver.FindElements(By.XPath(".//*[contains(@href,'buddylist')]")); 

でユーザリ​​ストを読み取ることができました。私はあなたを助けたり、少なくともヒントを与えてくれることを願っています。

+0

ありがとうございました –

+0

それは私のために働いていましたが、友人リストを取得するためのXpath式はこのようになります.//a [@ class = 'bu'] [contains(@ href、 'buddylist')] :) –

関連する問題