java - 如何使用 selenium webdriver 在网页上获取 ajax 添加的内容?

标签 java javascript ajax web-scraping selenium-webdriver

我写了一段代码来从一个网站上抓取一些信息。出于抓取目的,我正在使用 Selenium Webdriver。现在我的问题是,页面上有一些信息,但最初页面上只显示 10 个条目,我可以删除这 10 个条目。但是还有一些条目只有在点击位于页面底部load more链接后才会显示。每当我单击加载更多链接时,剩余的条目将加载到页面上而不刷新整个页面(可能是ajax更新)我无法废弃这个新加载的条目。请帮忙

这是我写的代码

WebDriver driver = new  HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);             
driver.get("some site url");
Thread.sleep(500);
driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("user name");     
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("password");      
driver.findElement(By.xpath("//*[@id=\"login\"]//div/button")).click();
Thread.sleep(200);                  
if(driver.getPageSource().toString().contains("Hi "+un)) {
    driver.get("http://www.somesite/m/searches/Loads/new");
    driver.findElement(By.xpath("//*[@id=\"Criteria_PostingAge\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"Criteria_PostingAge\"]")).sendKeys("12");   
    driver.findElement(By.xpath("//*[@id=\"Criteria_Origin_RawValue\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"Criteria_Origin_RawValue\"]")).sendKeys(orgn[paraCount]);                            
    driver.findElement(By.xpath("//*[@id=\"Criteria_Destination_RawValue\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"Criteria_Destination_RawValue\"]")).sendKeys(destn[paraCount]);              
    date=new Date();
    calendar=Calendar.getInstance();
    calendar.setTime(date);                             
    driver.findElement(By.xpath("//*[@id=\"Criteria_PickupFrom\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"Criteria_PickupFrom\"]")).sendKeys(pickupDtFmt.format(date).toString());
    calendar.add(Calendar.DAY_OF_MONTH, 1);
    date=calendar.getTime();                            
    driver.findElement(By.xpath("//*[@id=\"Criteria_PickupTo\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"Criteria_PickupTo\"]")).sendKeys(pickupDtFmt.format(date).toString());    
    driver.findElements(By.xpath("//*[@id=\"search-entry\"]//div/input")).get(11).click();
    Thread.sleep(2000);                                 
    // The code upto here will get me starting ten entries

   // In order to get more entries i need to click on load more o link                   
    driver.findElement(By.xpath("//*[@id=\"loadMore\"]")).click();
    Thread.sleep(3000);                              

    WebElement myDynamicElement = (new WebDriverWait(driver, 30))
                              .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"search-results\"]/div[2]/ul/li[12]"))); 

实际上,在单击load more anchor 链接后,我应该再获得十个条目。总共有 20 个条目。但是我只得到与第一次加载页面时相同的 10 个条目

最佳答案

我敢打赌,如果您改用 GhostDriver,您会得到不同的结果反而。没有理由使用 HtmlUnitDriver when GhostDriver can do the same and is probably more cutting edge technology .

关于java - 如何使用 selenium webdriver 在网页上获取 ajax 添加的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17469929/

相关文章:

java - .CSV 输出格式问题

java - Spring 配置: How to export util:list based bean in osgi:service?

java - 计数元素出现在链表Java中的次数

javascript - 无法在 Rails 5 中将 Json 数据获取到 Ajax

java - Oracle Apex“保存”按钮不可见

javascript - 基于窗口滚动算法定位的box-shadow

javascript - 如何更改选择框onload的选定选项?

javascript - 单击按钮播放全屏视频

javascript - 对 Django 的 Ajax 请求返回 404 not found

java - 如何使用 AJAX 使两个 JSF selectOneMenu 相互依赖?