我正在尝试登录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时,我的个人资料中没有任何信息。
答案 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();
希望它对您有所帮助!随时问我其他问题!