問題:我想從頁面中提取電話號碼。每個號碼都隱藏在名爲「顯示聯繫信息」的按鈕下。在您點擊按鈕之前,數字在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
你可以顯示你的代碼「失敗」,以及任何錯誤或如何「失敗」? – qxz
@qxz - 添加了代碼。謝謝。 – testerjoe2
我的答案能解決你的問題嗎? – qxz