从弹出窗口登录从个人资料获取数据

时间:2018-11-11 17:03:31

标签: java authentication jsoup

我正在尝试登录investing.com进入我的投资组合,以便在页面上获取当前信息。 我在登录时遇到问题,因为它不在主页上,而是一个名为“ loginPopupform”的弹出页面

这是我尝试过的代码。

String baseUrl = "https://www.investing.com"; 
String sChartLink = "https://www.investing.com/portfolio";
String strLogin = "username";
String strPassword = "password" ;
String ua = "\"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0\"";
Response res = null;
Document docRes = null;  
res = Jsoup
           .connect(baseUrl)
           .timeout(30000)
           .method(Connection.Method.POST)
           .data("loginFormUser_email", strLogin, "loginForm_password", strPassword)
           .userAgent(ua)
            .execute();        
docRes = res.parse();
Map<String, String> cookies = res.cookies();
doc1 = Jsoup.connect(sChartLink).userAgent(ua).cookies(cookies).get();
sDate = doc1.select("input[id=\"curDate\"]").text();

sDate为空,当我查看doc1时,我的个人资料中没有任何信息。

1 个答案:

答案 0 :(得分:0)

要确保您需要强制使用网站的JS,因为弹出模式不是静态内容,因此Jsoup不会检索它。因此,您需要使用Selenium来强制JS并检索动态内容。

如果是弹出模式,我想您需要单击一个按钮来加载它,使用Selenium for Java的方法如下:

WebDriver webDriver = new FirefoxDriver();
JavascriptExecutor js = (JavascriptExecutor)webDriver;

webDriver.get(URL);

WebDriverWait webDriverWait = new WebDriverWait(webDriver, 15); // wait 15 seconds

WebElement button = webDriver.findElement(By.id("id of the button that triggers the modal"));
js.executeScript("arguments[0].click();", button);

webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.name("loginPopupform")));

String fullHtml = webDriver.getPageSource();

希望它对您有所帮助!随时问我其他问题!