2016-08-28 70 views
0

問題:我想從頁面中提取電話號碼。每個號碼都隱藏在名爲「顯示聯繫信息」的按鈕下。在您點擊按鈕之前,數字在dom中找不到。當您單擊該按鈕時,該按鈕被替換爲電話號碼。如何通過頁面上的位置獲取元素?

有沒有一種可靠的方法來按頁面上的位置查找元素?如果是的話,我可以得到按鈕的位置,點擊它,然後獲得按鈕位置的電話號碼。

這是頁面https://sfbay.craigslist.org/pen/apa/5753779484.html 此頁面將在一段時間後刪除。發生這種情況時,我可以提供類似的頁面。

謝謝。


我也試過這種只使用XPath和它失敗:

1 - 獲取的「查看信息」按鈕同級元素前的第一次。

2 - 使用1中的元素,單擊按鈕。按鈕被電話號碼取代。

3 - 再次使用1中的元素,獲取電話號碼的文本。


代碼:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 

import java.util.ArrayList; 
import java.util.List; 

public class Temp { 

    private static WebDriver browser = new ChromeDriver(); 

    public static List<String> get_phone_numbers() { 
     String url = "https://sfbay.craigslist.org/pen/apa/5753779484.html"; 
     browser.get(url); 

     List<String> phones = new ArrayList<String>(); 
     String text; 
     String phone; 
     WebElement contact; 

     String before_contact_buttons_xpath = "//*[@id='postingbody']/a[contains(., 'show contact info')]/" + 
       "preceding-sibling::*[1]"; 

     //Get all the preceding sibling elements of "show contact info button." 
     List<WebElement> pre_contacts = browser.findElements(By.xpath(before_contact_buttons_xpath)); 

     for (WebElement pre_contact : pre_contacts) { 
      //Click the "show contact info" button. It disappears after click & is replaced by an phone number. 
      WebElement temp_contact_btn = pre_contact.findElement(By.xpath("following-sibling::*[1]")); 
      System.out.println(temp_contact_btn.getText()); 
      temp_contact_btn.click(); 

      //Now get the number from the replaced "show contact info" button. 
      contact = pre_contact.findElement(By.xpath("following-sibling::*[1]")); 

      text = contact.getText(); 
      System.out.println(text); 

      phone = "000-111-2222";//extract_phone_number(text); 

      phones.add(phone); 
     } 
     return phones; 
    } 

    public static void main(String[] args) { 
     List<String> phones = get_phone_numbers(); 
    } 
} 

輸出:

show contact info 
show contact info 
+0

你可以顯示你的代碼「失敗」,以及任何錯誤或如何「失敗」? – qxz

+0

@qxz - 添加了代碼。謝謝。 – testerjoe2

+0

我的答案能解決你的問題嗎? – qxz

回答

1

在該頁面中,單擊按鈕(實際上是一個<a>)觸發XMLHttpRequest重新加載的全部內容描述部分。它似乎只是執行<a>hrefhttps://sfbay.craigslist.org/fb/sfo/apa/5753779484的GET請求。嘗試轉到該鏈接或右鍵單擊「按鈕」並在新選項卡中打開鏈接。

一旦你有<a>元素,我建議請求頁面href,然後以某種方式解析內容來獲得電話號碼。假設沒有任何其他電話號碼,這對正則表達式不會太難。

相關問題